wie das einfügen neuer Zeilen mit Werten in demselben Blatt eine excel-Datei in java
Möchte ich neue Zeilen einfügen, während des Schreibens in Excel-Blatt.
Hier ist mein code:
public static void addValuesInWorkbook(String pathAndFileName, String sheetName,
int rowNum, String valuesString,String delimeter) {
if(pathAndFileName.length() > 0 && sheetName.length() > 0 && rowNum >= 0 && valuesString.length() > 0 && delimeter.length() > 0)
{
String[] colValues= null;
if("|".equals(delimeter))
colValues = valuesString.split("\\|");
else
colValues = valuesString.split(delimeter);
int cellnum = 0;
FileInputStream fsIP;
try {
fsIP = new FileInputStream(new File(pathAndFileName));
//Read the spreadsheet that needs to be updated
if(rowNum > 0)
{
rowNum--; //As row indexing starts from 0
}
HSSFWorkbook wb = new HSSFWorkbook(fsIP); //Access the workbook
HSSFSheet sheet = wb.getSheet(sheetName);
HSSFRow row = sheet.getRow(((rowNum>0)?rowNum:0));
HSSFCell cell=null;
for(String colValue:colValues)
{ if(row!=null){
cell = row.getCell(cellnum);
if(cell==null)
cell = row.createCell(cellnum);
}
else if (row == null)
{
row =sheet.createRow(rowNum); //Create a row if it does not exist
cell = row.createCell(cellnum);
}
cell.setCellValue(colValue);
cellnum++;
}
fsIP.close(); //Close the InputStream
FileOutputStream output_file =new FileOutputStream(new File(pathAndFileName)); //Open FileOutputStream to write updates
wb.write(output_file); //write changes
output_file.close(); //close the stream
} catch (FileNotFoundException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Werte sind immer eingefügt mit Header(Spaltennamen
- ) aber wenn neue Zeilen eingefügt werden, es ersetzt die ältere Zeile Werte.
Bitte helfen.
- Bitte erklären Sie, was falsch ist im code in Bezug auf das, was Sie erwarten und was es zeigt. Ihre Frage ist mir nicht klar..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, weil Sie erstellen neue Zeilen in eine Zeile-index, die bereits Werte haben.
Sie benötigen eine Verschiebung der vorhandenen Zeilen, 1 Zeile nach unten, so dass der index, den Sie möchten, um eine Zeile einfügen ist "frei".
In anderen Worten, "createRow()" erzeugt immer eine neue Zeile und der index x, egal ob es schon eins.
Verwenden Sie Blatt.shiftRows(..)
Siehe:
https://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFSheet.html#shiftRows(int, int, int)
Das erste argument sollte der index der Zeile, wo Sie wollen, um etwas einfügen, das zweite die Nummer Ihres letzten Zeile und die Dritte sollte 1 sein. So werden alle Zeilen ab x wird verschoben, eine Zeile nach unten, und Sie können fügen Sie Ihre Zeile auf x.
Beispiel: jede Zeile ist eine Zeile mit Inhalt.
shiftRows(3,7,1) wird dies tun:
createRow(3), setzen Sie die Zelle Werte: