2017-11-13 5 views
-1
  • Ich lese eine XLSX-Datei mit Java (Apache POI).
  • Ich habe eine Document-Klasse erstellt (mit allen Excel-Spaltenüberschriften als Variablen)
  • Ich muss jede Zeile im Excel lesen und der Document-Klasse zuordnen, indem ich eine Sammlung von Document-Klasse erstelle.
  • Das Problem, das ich bin vor, dass ich von Reihe 2 und von Spalte 7 bis Spalte 35 und Karte die entsprechenden Werte in die Dokumentklasse Lesen beginnen.Wie bestimmte bestimmte Zeilen und Spalten von einem Excel-Blatt abrufen?

  • leider nicht möglich, genau herauszufinden, wie der Code enthalten sein sollte?

  • Ich habe die folgenden Codezeilen geschrieben.

List sheetData = new ArrayList(); 
     InputStream excelFile = new BufferedInputStream(new FileInputStream("D:\\Excel file\\data.xlsx")); 
     Workbook workBook = new XSSFWorkbook(excelFile); // Creates Workbook 
     XSSFSheet sheet = (XSSFSheet) workBook.getSheet("Daily"); 
     DataFormatter formatter = new DataFormatter(); 
     for (int i = 7; i <= 35; i++) { 
      XSSFRow row = sheet.getRow(i); 
      Cell cell = row.getCell(i); 
      String val = formatter.formatCellValue(cell); 
      sheetData.add(val); 
     } 

+0

Was funktioniert nicht mit Ihrem Code geschrieben? – Gagravarr

+0

Es wird nur 1 Zeile vom Excel abgerufen. Es gibt 400 Zeilen und 30 Spalten in der Excel-Tabelle. Ich muss Daten von Zeile Nr. Abholen. 2 und aus Spalte Nr. 7 bis zum Ende. Wie kann ich das Code-mäßig machen? Jede Art von Hilfe wird geschätzt. – Sambit

+0

Haben Sie meine Frage richtig? – Sambit

Antwort

0

Unter der Annahme, Ich habe Ihre Frage richtig verstanden. Ich glaube, Sie möchten jede Zeile, die von Zeile 2 an bis zum Ende der Datei existiert, und für jede dieser Zeilen c Stellen Sie sich die Zellen in den Spalten 7 bis 35 vor. Ich glaube, dass Sie diese Werte auch verarbeiten müssen, aber Sie haben nicht gesagt, wie, also für dieses Beispiel stopf ich sie einfach in eine Liste von Strings und hoffe auf das Beste. .

wird auf der für den Umgang mit leeren Zeilen und Zellen Apache POI documentation for iterating over rows and cells

File excelFile = new File("D:\\Excel file\\data.xlsx"); 
Workbook workBook = WorkbookFactory.create(excelFile); 
Sheet sheet = workBook.getSheet("Daily"); 
DataFormatter formatter = new DataFormatter(); 

// Start from the 2nd row, processing all to the end 
// Note - Rows and Columns in Apache POI are 0-based not 1-based 
for (int rn=1; rn<=sheet.getLastRowNum(); rn++) { 
    Row row = sheet.getRow(rn); 
    if (row == null) { 
     // Whole row is empty. Handle as required here 
     continue; 
    } 
    List<String> values = new ArrayList<String>(); 
    for (int cn=6; cn<35; cn++) { 
     Cell cell = row.getCell(cn); 
     String val = null; 
     if (cell != null) { val = formatter.formatCellValue(cell); } 
     if (val == null || val.isEmpty()) { 
     // Cell is empty. Handle as required here 
     } 
     // Save the value to list. Save to an object instead if required 
     values.append(val); 
    } 
} 
workBook.close(); 

Je nach Geschäftsanforderungen, setzen in der Logik

Dieses basiert. Dann tun Sie, was immer Sie mit den Werten, die Sie finden, tun müssen, wieder nach Ihren Geschäftsanforderungen!

+0

Danke für den Code @Gagravarr Nachdem die Werte zu holen, ich habe die Zellenwerte jeder Zeile in der Excel auf die Java-Klasse zur Karte habe ich erstellt und die Daten drücken db mongo .. Das Problem, das ich mit Blick auf bin hier, wenn ich Ich setze den erhaltenen String-Wert auf die Variablen der Klasse, er liest nur einen Wert und setzt ihn für alle Felder gleich. – Sambit

+0

Sie wollen wahrscheinlich eine ganz neue Frage beim Drehen der Saiten in der mongodb Wrapper – Gagravarr

+0

dann fragen Yes..How kann ich es tun? – Sambit

0

Sie mit einem Iterator in dem Dokument durchlaufen könnten, aber es ist auch eine Funktion "getRow() und GetCell()"

Workbook workbook = new XSSFWorkbook(excelFile); 

    // defines the standard pointer in document in the first Sheet 
    XSSFSheet data = this.workbook.getSheetAt(0); 
    // you could iterate the document with an iterator 
    Iterator<Cell> iterator = this.data.iterator(); 

    // x/y pointer at the document 
    Row row = data.getRow(y); 
    Cell pointingCell = row.getCell(x); 

    String pointingString = pointingCell.getStringCellValue(); 
+0

Ich kann keine Iteratoren verwenden. Ich kann nur DataFormatter verwenden. Jede Art von Hilfe wird geschätzt. – Sambit

+1

Warum können Sie Iteratoren nicht verwenden? –

+0

Die Verwendung von Iterator bedeutet eine Verschwendung von Codezeilen hier. – Sambit

Verwandte Themen