J'ai juste une petite question sur la façon de lire dans un fichier xlsx en utilisant le format XSSF d'Apache.
En ce moment, mon code ressemble à ceci:
InputStream fs = new FileInputStream(filename); // (1)
XSSFWorkbook wb = new XSSFWorkbook(fs); // (2)
XSSFSheet sheet = wb.getSheetAt(0); // (3)
... avec toutes les choses pertinentes importées. Mon problème est que lorsque je frappe run, il se coince à la ligne (2), dans une boucle presque infinie. filename
est juste une chaîne.
Si quelqu'un pouvait me donner un exemple de code sur la façon de résoudre ce problème, je l'apprécierais vraiment. Tout ce que je veux maintenant, c’est lire dans une seule cellule à partir d’un fichier xlsx; J'utilisais HSSF pour les fichiers xls et je n'avais aucun problème.
Merci pour votre aide, Andrew
InputStream inp = null;
try {
inp = new FileInputStream("E:/sample_poi.xls");
Workbook wb = WorkbookFactory.create(inp);
Sheet sheet = wb.getSheetAt(0);
Header header = sheet.getHeader();
int rowsCount = sheet.getLastRowNum();
System.out.println("Total Number of Rows: " + (rowsCount + 1));
for (int i = 0; i <= rowsCount; i++) {
Row row = sheet.getRow(i);
int colCounts = row.getLastCellNum();
System.out.println("Total Number of Cols: " + colCounts);
for (int j = 0; j < colCounts; j++) {
Cell cell = row.getCell(j);
System.out.println("[" + i + "," + j + "]=" + cell.getStringCellValue());
}
}
} catch (Exception ex) {
Java.util.logging.Logger.getLogger(FieldController.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
inp.close();
} catch (IOException ex) {
Java.util.logging.Logger.getLogger(FieldController.class.getName()).log(Level.SEVERE, null, ex);
}
}
Je pense que cela répondra à vos questions: http://poi.Apache.org/spreadsheet/quick-guide.html#ReadWriteWorkbook
En bref, votre code devrait ressembler à ceci:
InputStream inp = new FileInputStream("workbook.xlsx");
Workbook wb = WorkbookFactory.create(inp);
Sheet sheet = wb.getSheetAt(0);
Row row = sheet.getRow(2);
Cell cell = row.getCell(3);
Pourquoi divisez-vous le fichier en un InputStream? XSSFWorkbook a un constructeur qui prend simplement le chemin comme une chaîne. Codez simplement le chemin de la chaîne. Une fois que vous avez créé le classeur, vous pouvez créer des feuilles XSSFS à partir de celui-ci. Puis XSSFCells, qui vous permettra enfin de lire le contenu d'une seule cellule (les cellules sont basées sur des emplacements x, y essentiellement)
Vous pouvez essayer ce qui suit.
private static void readXLSX(String path) throws IOException {
File myFile = new File(path);
FileInputStream fis = new FileInputStream(myFile);
// Finds the workbook instance for XLSX file
XSSFWorkbook myWorkBook = new XSSFWorkbook (fis);
// Return first sheet from the XLSX workbook
XSSFSheet mySheet = myWorkBook.getSheetAt(0);
// Get iterator to all the rows in current sheet
Iterator<Row> rowIterator = mySheet.iterator();
// Traversing over each row of XLSX file
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
// For each row, iterate through each columns
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext()) {
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
System.out.print(cell.getStringCellValue() + "\t");
break;
case Cell.CELL_TYPE_NUMERIC:
System.out.print(cell.getNumericCellValue() + "\t");
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.print(cell.getBooleanCellValue() + "\t");
break;
default :
}
}
System.out.println("");
}
}
cela fonctionne bien: essayez-le
File filename = new File("E:/Test.xlsx");
FileInputStream isr= new FileInputStream(filename);
Workbook book1 = new XSSFWorkbook(isr);
Sheet sheet = book1.getSheetAt(0);
Iterator<Row> rowItr = sheet.rowIterator();
public class ExcelReader{
public String path;
public static FileInputStream fis;
public ExcelReader(){
System.out.println("hello");
}
public ExcelReader(String path){
this.path=path;
fis=new FileInputStream(path);
XSSFWorkbook workbook=new XSSFWorkbook(fis);
XSSFSheet sheet=workbook.getSheet("Sheet1");//name of the sheet
System.out.println(sheet.getSheetName());
System.out.println(sheet.getLastRowNum());
System.out.println(sheet.getRow(2).getCell(3));
}
public static void main(String[] args) throws IOException {
ExcelReader Excel=new ExcelReader("path of xlsx");
}
}