修改XSSFWorkbook样式表以删除重复的CellStyleXfs

时间:2014-09-10 19:03:02

标签: java apache-poi xlsx

在iPad上查看某些xlsx文件时遇到问题,我跟踪xlsx档案中的styles.xml文件太大的问题。我能够在手动删除重复条目并让excel修复文件后查看文件,但为了解决其他文件的情况,我宁愿使用POI编程解决方案,不幸的是我在尝试保存工作簿时遇到了问题在我修改了样式表之后。

我尝试为HSSFWorkbook复制optimiseCellStyles(HSSFWorkbook工作簿)的格式,但内部是不同的,违规样式只是特定类型。 在检查了许多XSSFWorkbook函数后,我发现了

XSSFWorkbook wb; // with proper initialization
wb.getStylesSource().getCTStylesheet().getCellStyleXfs(); 

返回了大约40,000个条目,其中大部分是

<main:xf numFmtId="0" fontId="0" fillId="0" borderId="0"/>

因此,我尝试在书中找出重复项的位置,并通过调用

删除它们
XSSFWorkbook wb; // with proper initialization
wb.getStylesSource().getCTStylesheet().getCellStyleXfs().removeXf(i);

但在尝试保存文件时删除样式后,StylesTable.java会抛出有关org.apache.xmlbeans.impl.values.XmlValueDisconnectedException的错误。我尝试了许多不同的途径并收到了类似的错误。

查看StylesTable.java中的代码,看起来类保留了样式表的单独副本而不是CTStylesheet,修改后的大小差异导致了问题,但我想我误解了如何正确跟踪这些记录,特别是因为

XSSFCell cell; //with proper initialization
cell.getCellStyle().getStyleXf().getXfId(); 
尽管xml文件中有数千个条目,但

始终返回1到5之间的数字。

是否有更标准的方法来清理我缺少的工作簿的这一部分?

我是否误解了工作簿内部或POI功能?

任何帮助将不胜感激。

0 个答案:

没有答案