2014-09-17 56 views
5

ho fuse due file Excel utilizzando il codice specicata quiPOI Excel Unire causando "Records riparati: Formato da parte /xl/styles.xml (stili)"

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

questo blocco applicando gli stili per le mie celle di fusione

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); 
    } 
} 

Tutto funziona come previsto e sta andando bene nel generare il mio XSSFWorkbook.

Problema con l'avvio quando provo ad aprirlo:

vedo sotto l'errore

enter image description hereenter image description here

e la mia segnalazione errori sotto

<?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> 

Dopo tutti questi il ​​mio foglio apre bene, ma senza stili. So che c'è una limitazione sul numero di stili da creare e ho contato gli stili creati e difficilmente vedo 4 creati. So anche che questo problema riguarda troppi stili.

Purtroppo, POI ha il supporto per ottimizzare solo HSSFWorkbook (Apache POI delete CellStyle from workbook)

Qualsiasi aiuto su come attenuare questo problema sarà grande.

+0

Ti sei assicurato che stai utilizzando la versione più recente? (3.11 beta 2 al momento della scrittura) – Gagravarr

+0

Sì, ho provato a utilizzare 3.11 beta 2 e vedo ancora lo stesso problema. Prima ero al 3,9 anche se – Shiv

risposta

3

Bene, dopo il debug del bit del codice POI e di come vengono applicati gli stili e così via.

Facendo seguito risolto il problema

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

Lascia che ti chieda, cos'hai davanti a questo codice aggiornato? – Osmar

2

ho avuto lo stesso problema. È necessario ridurre a icona le istanze di stili e tipi di carattere perché ogni istanza viene inserita in xl/styles.xml

Crea stili e caratteri solo una volta per un libro.

+0

Non ho più stili .. Ne ho solo uno per libro. Sopra detta soluzione funziona bene. – Shiv

+0

Anche se il problema di Shivs non è correlato a un numero totale di stili creati su una cartella di lavoro, ma questo può essere causato da esso e per me, era esattamente ciò che stava accadendo, il limite massimo per gli stili che è possibile creare è di circa 50k a 60k in una cartella di lavoro. – Vivek

1

Ho avuto lo stesso problema utilizzando la libreria Python xlxswriter con Pandas. Dopo che ho smesso di provare ad usare le specifiche date_format di Pandas, ho smesso di ricevere l'errore.

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

Direi che non è lo stesso problema, solo sintomi simili (che sono molto comuni per una vasta gamma di errori di Excel). Nell'esempio dei panda è probabilmente causato dal formato della data, ''% m /% d /% Y'', che non è valido in Excel. Provare invece qualcosa come ''mm/dd/yy''. – jmcnamara

Problemi correlati