Pour ceux qui ont déjà utilisé HSSF, j'ai un "souci" qui est contournable mais quand même étrange.
Je souhaite juste afficher le contenu du premier onglet d'un fichier Excel.
Voila le code que j'utilise:
Code :
- POIFSFileSystem fs = new POIFSFileSystem( new FileInputStream("C:/test/targets/test_rigolo97.xls" ) );
- HSSFWorkbook wb = new HSSFWorkbook(fs);
- HSSFSheet sheet = wb.getSheetAt(0);
- HSSFRow row;
- Iterator cells;
- HSSFCell cell;
-
- Iterator rows = sheet.rowIterator();
- while( rows.hasNext() ) {
- row = (HSSFRow) rows.next();
- System.out.println( "Row #" + row.getRowNum() );
- cells = row.cellIterator();
-
- while( cells.hasNext() ) {
- cell = (HSSFCell) cells.next();
- System.out.println( "Cell #" + cell.getCellNum() );
- switch ( cell.getCellType() ) {
- case HSSFCell.CELL_TYPE_NUMERIC:
- System.out.println( cell.getNumericCellValue() );
- break;
- case HSSFCell.CELL_TYPE_STRING:
- System.out.println( cell.getRichStringCellValue().getString() );
- break;
- default:
- System.out.println( "x" );
- break;
- }
- }// end of row
- }
|
Avec le fichier Excel suivant :
A1 B1 C1
A2 B2 C2
A3 B3 C3
A4 B4 C4 |
Et voila ce qui s'affiche:
Row #0
Cell #1
B1
Cell #2
C1
Row #1
Cell #1
B2
Cell #2
C2
Row #2
Cell #1
B3
Cell #2
C3
Row #3
Cell #1
B4
Cell #2
C4 |
Bref, la première colonne n'est pas prise en compte... Pour qu'elle le soit, il faut explicitement afficher la première cell de la row avec:
Code :
- ...
- Iterator cells = row.cellIterator();
-
- cell = (HSSFCell) row.getCell((short)0);
- System.out.println( "Cell #" + cell.getCellNum() );
- switch ( cell.getCellType() ) {
- case HSSFCell.CELL_TYPE_NUMERIC:
- System.out.println( cell.getNumericCellValue() );
- break;
- case HSSFCell.CELL_TYPE_STRING:
- System.out.println( cell.getRichStringCellValue().getString() );
- break;
- default:
- System.out.println("x" );
- break;
- }
- ...
- while( cells.hasNext() ) {
|
Ou alors éviter d'utiliser des Iterator. Très bizarre...