2017-01-26 4 views
0

Ich bin fast da, um mein Problem zu lösen, aber nur in kleinen Problem stecken geblieben. Ich versuche, eine Excel-Datei von LinkedHashmap zu drucken. Ich benutze Java und POI-Bibliothek für meinen Zweck.Schreiben Excel Blatt mit LinkedHashmap mit Java POI

Ich extrahiere einige Daten aus einer anderen Excel-Datei in LinkedHashmap und drucke diese Daten in neue Excel-Datei.

gespeicherten Daten in LinkedHashmap sind groß und in folgenden Weise aufgeführt:

Keys | Values 
----------------------------------- 
    Key1 : value1, value1, value1 
    Key2 : value2, value2, value2 
    key3 : value3, value3, value3 

Was ich will:

Ausgabe in Excel-Datei sollte in folgendem Format angezeigt:

Excel_file_out_deserved.xslx: 

    + 
key1 | value1 
key1 | value1 
key1 | value1 
    |  // (if possible, empty cell space here will look good) 
key2 | value2 
key2 | value2 
key2 | value2 
    |  // (if possible, empty cell space here will look good) 
key3 | value3 
key3 | value3 
key3 | value3 

Was ich bekomme:

My_excel_file_out.xslx: 

    | value1 // (why my first column is empty?!, it should print keys there) 
    | value1 
    | value1 
    | value2 
    | value2 
    | value2 
    | value3 
    | value3 
    | value3 

Was ich versucht:

FileOutputStream out = new FileOutputStream(new File("my_excel.xlsx")); 

XSSFWorkbook newWorkbook = new XSSFWorkbook(); 
XSSFSheet sheet = newWorkbook.createSheet("print_vertical"); 
int row = 0; 

// loop through all the keys 
for(String key : linkMap.keySet()){ 

    List<String> values = linkMap.get(key); 

    for (String value:values){ 

     // print keys in 1st column 
     sheet.createRow(row).createCell(0).setCellValue(key); // why this doesn't work? :-/ 
     // print values in 3rd column 
     sheet.createRow(row).createCell(2).setCellValue(value); // this works fine 
     row++; 
     } 

    } 

    newWorkbook.write(out); 
    out.close(); 

Mysteriously, wenn ich für-Schleife von Werten inneren entfernen, ohne sheet.createRow(row).createCell(0).setCellValue(key); Linie Weglassen der äußeren Schleife korrekt Schlüsselwerte in der ersten Spalte Zeile drucken weise. Ich kann nicht herausfinden, wo ich Fehler mache. Vielen Dank.

Antwort

2

Sie Ihre Zeile erstellen zweimal durch

sheet.createRow(row) 

Aufruf Sie die Zeile in einer Variablen und Aufrufen der createCell(x) dort

for (String value:values){ 
    Row newRow = sheet.creatRow(row); 
    newRow.createCell(0).setCellValue(key); 
    newRow.createCell(2).setCellValue(value); 
    row++; 
} 

Problem speichern möchten wurde:

Blatt. createRow (Zeile) .createCell (0) .setCellValue (Schlüssel); // neue Zeile im Index 'Zeile' erstellen sheet.createRow (Zeile) .createCell (2) .setCellValue (Wert); // Erstelle eine neue Zeile im selben Zeilenindex

, damit deine erste Zeile überschrieben wird.

+0

Vielen Dank für die Antwort und Erklärung. Es wirkt wie ein Zauber. genau was ich wollte :) – Dhruvify

Verwandte Themen