Ich habe nur eine kurze Frage zum Einlesen einer Xlsx-Datei im XSSF-Format von Apache.
Im Moment sieht mein Code so aus:
InputStream fs = new FileInputStream(filename); // (1)
XSSFWorkbook wb = new XSSFWorkbook(fs); // (2)
XSSFSheet sheet = wb.getSheetAt(0); // (3)
... mit allen relevanten Dingen importiert. Mein Problem ist, dass ich, wenn ich auf run gehe, in Linie (2) stecken bleibt, in einer fast unendlichen Schleife. filename
ist nur eine Zeichenfolge.
Wenn mir jemand Beispielcode geben könnte, wie ich das beheben könnte, würde ich das wirklich schätzen. Alles, was ich jetzt möchte, ist, eine einzelne Zelle aus einer XLSX-Datei einzulesen. Ich habe HSSF für XLS-Dateien verwendet und hatte keine Probleme.
Vielen Dank für Ihre Hilfe. 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);
}
}
Ich bin der Meinung, dass dies Ihre Fragen beantwortet: http://poi.Apache.org/spreadsheet/quick-guide.html#ReadWriteWorkbook
Kurz gesagt, Ihr Code sollte so aussehen:
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);
Warum zerlegen Sie die Datei in einen InputStream? XSSFWorkbook hat einen Konstruktor, der den Pfad einfach als String verwendet. Geben Sie einfach den Pfad der Zeichenfolge fest ein. Sobald Sie die Arbeitsmappe erstellt haben, können Sie daraus XSSFSheets erstellen. Dann XSSFC-Zellen, mit denen Sie schließlich den Inhalt einer einzelnen Zelle lesen können (Zellen basieren im Wesentlichen auf x-, y-Positionen).
Sie können folgendes versuchen.
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("");
}
}
Ich habe den gleichen Fehler, ich habe gerade die POM-Abhängigkeiten mit der gleichen Version aktualisiert. Es funktionierte.
<!-- https://mvnrepository.com/artifact/org.Apache.poi/poi -->
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.Apache.poi/poi-ooxml -->
<dependency>
<groupId>org.Apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
das funktioniert gut: probieren Sie es aus
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");
}
}