2014-09-17 38 views
5

Ich fusionierte haben zwei Excel-Dateien den Code mit specied hierPOI Excel Merging "Reparierte Datensätze: Format von /xl/styles.xml Teil (Styles)" Verursachung

http://www.coderanch.com/t/614715/Web-Services/java/merge-excel-files

dieses der Block die Stile Anwendung für meine Zellen verbinden

if (styleMap != null) 
{ 
    if (oldCell.getSheet().getWorkbook() == newCell.getSheet().getWorkbook()) 
    { 
    newCell.setCellStyle(oldCell.getCellStyle()); 
    } 
    else 
    { 
    int stHashCode = oldCell.getCellStyle().hashCode(); 
    XSSFCellStyle newCellStyle = styleMap.get(stHashCode); 
    if (newCellStyle == null) 
    { 
     newCellStyle = newCell.getSheet().getWorkbook().createCellStyle(); 
     newCellStyle.cloneStyleFrom(oldCell.getCellStyle()); 
     styleMap.put(stHashCode, newCellStyle); 
    } 
    newCell.setCellStyle(newCellStyle); 
    } 
} 

alles gut funktioniert wie erwartet und werde meinen XSSFWorkbook zu generieren.

Problem beginnt, wenn ich versuche, es zu öffnen:

ich unten Fehler sehen

enter image description hereenter image description here

und mein Bericht enthält unter

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> 
    <logFileName>error072840_01.xml</logFileName> 
    <summary>Errors were detected in file 'XYZ.xlsx'</summary> 
    <repairedRecords summary="Following is a list of repairs:"> 
     <repairedRecord>Repaired Records: Format from /xl/styles.xml part (Styles)</repairedRecord> 
    </repairedRecords> 
</recoveryLog> 

Nachdem diese alle meine Blatt öffnet gut, aber ohne Stile. Ich weiß, dass es eine Begrenzung für die Anzahl der zu erstellenden Stile gibt, und zähle die Stile, die erstellt werden, und ich sehe kaum 4 erstellt. Ich weiß sogar, dass dieses Problem mit zu vielen Stilen verbunden ist.

Leider hat POI Unterstützung nur HSSFWorkbook (Apache POI delete CellStyle from workbook)

Jede Hilfe in optimieren, wie dieses Problem zu mildern wird groß sein.

+0

Haben Sie sichergestellt, dass Sie die neueste Version verwenden? (3.11 Beta 2 zum Schreiben) – Gagravarr

+0

Ja, ich habe versucht, 3.11 Beta 2 und immer noch sehe ich das gleiche Problem. Früher war ich auf 3.9 obwohl – Shiv

Antwort

3

Nun, nach dem Debuggen von Bit POI-Code und wie Stile angewendet werden und so.

unten Dadurch löste das Problem

newCellStyle.getCoreXf().unsetBorderId(); 
     newCellStyle.getCoreXf().unsetFillId(); 
+0

Lassen Sie mich Sie fragen, was hatten Sie vor diesem aktualisierten Code? – Osmar

2

ich hatte das gleiche Problem. Sie sollten Instanzen Stile und Schriften zu minimieren, da jede Instanz in xl/styles.xml

Machen Stile und Schriften für ein Buch nur einmal platziert ist.

+0

Ich habe nicht mehrere Stile .. Ich hatte nur einen pro Buch. Oben genannte Lösung funktioniert gut. – Shiv

+0

Obwohl das Shivs-Problem nicht mit einer Gesamtzahl von in einer Arbeitsmappe erstellten Stilen zusammenhängt, kann dies aber auch von mir verursacht werden. Es war genau das, was geschah. Die maximale Obergrenze für Stile liegt bei 50k bis 60k ein Arbeitsbuch. – Vivek

1

Ich hatte das gleiche Problem mit der Python-Bibliothek xlxswriter mit Pandas. Nachdem ich aufgehört habe, die date_format-Spezifikation der Pandas zu verwenden, habe ich den Fehler nicht mehr erhalten.

import pandas as pd 

data = pd.read_excel('somefile.xlsx') 
grp = data.groupby('Property Manager') 

for i, (pm, g) in enumerate(grp): 
    writer = pd.ExcelWriter(p + f.format(pm[:30]), engine='xlsxwriter') #,date_format='%m/%d/%Y') 
    g[cols].to_excel(writer, sheet_name='Summary', index=False) 
    writer.save() 
+1

Ich würde sagen, dass es nicht das gleiche Problem ist, nur ähnliche Symptome (die für eine breite Palette von Excel-Fehlern sehr häufig sind). Im Pandas-Beispiel ist dies wahrscheinlich auf das Datumsformat "% m /% d /% Y" zurückzuführen, das in Excel nicht gültig ist. Versuchen Sie stattdessen etwas wie "mm/dd/yy". – jmcnamara