首页 文章

POI Excel合并导致“修复记录:来自/xl/styles.xml部分(样式)的格式”

提问于
浏览
5

我使用此处指定的代码合并了两个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方面做得很好 .

我尝试打开时出现问题:

我看到下面的错误

enter image description here

enter image description here

我的错误报告包含在下面

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

毕竟这些我的表单打开很好,但没有样式 . 我知道要创建的样式数量有限制,并且已经计算了正在创建的样式,我几乎看不到创建的样式 . 我甚至知道这个问题的风格太多了 .

不幸的是,POI支持仅优化HSSFWorkbook(Apache POI delete CellStyle from workbook

如何缓解这个问题的任何帮助都会很棒 .

3 回答

  • 2

    那么,在调试了POI代码的位以及如何应用样式之后 .

    以下做了解决问题

    newCellStyle.getCoreXf().unsetBorderId();
          newCellStyle.getCoreXf().unsetFillId();
    
  • 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()
    
  • 3

    我遇到过同样的问题 . 您应该最小化样式和字体的实例,因为每个实例都放在 xl/styles.xml

    只为一本书制作一次样式和字体 .

相关问题