我使用此处指定的代码合并了两个excel文件
http://www.coderanch.com/t/614715/Web-Services/java/merge-excel-files
这个块应用我的合并单元格的样式
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);
}
}
这一切都按预期工作,并且在生成我的XSSFWorkbook方面做得很好。
尝试打开时出现问题:
我看到以下错误
我的错误报告包含在下面
<?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>
在所有这些之后,我的表单打开很好,但没有样式。我知道要创建的样式数量有限制,并计算了正在创建的样式,我几乎看不到4创建。我甚至知道这个问题的风格太多了。
不幸的是,POI支持仅优化HSSFWorkbook(Apache POI delete CellStyle from workbook)
如何缓解此问题的任何帮助都会很棒。
答案 0 :(得分:3)
好吧,经过调试POI代码的位以及如何应用样式等等。
以下解决问题
newCellStyle.getCoreXf().unsetBorderId();
newCellStyle.getCoreXf().unsetFillId();
答案 1 :(得分:2)
我有同样的问题。
您应该最小化样式和字体的实例,因为每个实例都放在xl/styles.xml
只为一本书制作一次样式和字体。
答案 2 :(得分:1)
我在使用Python库xlxswriter和Pandas时遇到了同样的问题。在我停止尝试使用Pandas的date_format规范后,我不再收到错误。
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()