2016-03-23 4 views
0

Ich habe poi 3.12 verwendet, um Excel zu erstellen, und ein Phänomen gefunden, das explizit 30000 Zeilen erstellt, aber öffnen Sie die generierte Excel, nur 27239 Zeilen haben, und es gibt keine Fehlerausgabe. Es scheint also, dass poi eine Standard-Zeilennummer - 27239 eingestellt hat. Aber ich habe versucht Quellcode zu finden, kann keine Variable wie max Zeilen finden. Der Code istpoi hat eine implizit maximale Zeilennummer

InputStream is = new FileInputStream(srcFile); 
POIFSFileSystem pOIFSFileSystem=new POIFSFileSystem(is); 
HSSFWorkbook srcWorkbook = new HSSFWorkbook(pOIFSFileSystem); 
buildBusiData(srcWorkbook); 
FileOutputStream fileOutputStream = new FileOutputStream(desFile); 
srcWorkbook.write(fileOutputStream); 

fileOutputStream.flush(); 
fileOutputStream.close(); 

Also, wie ist das?

+1

Excel '.xls' Dateien beschränken sich auf [64k (2^16) Reihen] (https://poi.apache.org/apidocs/org/ apache/poi/ss/SpreadsheetVersion.html # EXCEL97), das ist das einzige Limit, das POI erzwingt und das ist ein Dateiformat. Also, irgendwelche Bugs müssen in Ihrem Code sein, und ohne in der Lage zu sein, den Generationscode zu sehen, gibt es nichts, was wir tun können, um zu helfen ... – Gagravarr

+0

Danke @Gagravarr Sie haben Recht. Ich habe den Grund gefunden, siehe unten meinen Beitrag. Aber es ist nicht sehr leicht, es zu finden, zuerst dachte ich, dass die Ursache in "HSSFWorkbook.write" und verfolgte es, aber fand nichts. Dann setze ich 'HSSFSheet.getLastRowNum()' in diff place und finde den Problemcode endlich. – zhuguowei

Antwort

0

Ich habe den Grund gefunden, dass die Quelldatei (Template) nur 27239 Zeilen

#source file 
cat coupon_code_box.csv | wc -l 
27240 
# 
head coupon_code_box.csv -n 3 
table header here 
" "," "," "," "," "," "," "," "," " 
" "," "," "," "," "," "," "," "," " 

und in meinem Code nicht neue Zeile explizit erstellen, so dass, wenn die Zeilennummer größer als 27239, ist es Ich werde es ignorieren.

Row row = sheet.getRow(rowIndex); 
if(row!=null){ 
    Cell cell = row.getCell(celIndex); 
    cell.setCellValue(fillVal); 
} 

Jetzt ist meine Lösung ist

Row row = sheet.getRow(rowIndex); 
if(row==null){ 
    row=sheet.createRow(rowIndex); //explicitly create one new row 
} 
if(row!=null){ 
    Cell cell = row.getCell(celIndex); 
    if(cell==null) 
     cell = row.createCell(celIndex); //explicitly create one new cell 
    cell.setCellValue(fillVal); 
} 
+0

Nicht sicher, dass der letzte Code alle benötigt wird - Sie stellen sicher, dass eine Zelle nie null ist, dann prüfen Sie, ob sie nicht null ist? – Gagravarr

Verwandte Themen