Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 修改XSSF工作簿样式表以删除重复的CellStylexF_Java_Apache Poi_Xlsx - Fatal编程技术网

Java 修改XSSF工作簿样式表以删除重复的CellStylexF

Java 修改XSSF工作簿样式表以删除重复的CellStylexF,java,apache-poi,xlsx,Java,Apache Poi,Xlsx,在iPad上查看某些xlsx文件时遇到问题,我发现xlsx归档文件中的style.xml文件太大。在手动删除重复条目并让excel修复文件后,我可以查看文件,但为了解决其他文件的问题,我宁愿使用POI的编程解决方案,不幸的是,在修改样式表后尝试保存工作簿时遇到了问题 我试图为HSSF工作簿复制OptimizeCellStyles(HSSF工作簿)的格式,但其内部内容不同,且有问题的样式仅属于特定类型。 在检查了大量XSSFWorkbook函数之后,我发现 XSSFWorkbook wb; //

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

我试图为HSSF工作簿复制OptimizeCellStyles(HSSF工作簿)的格式,但其内部内容不同,且有问题的样式仅属于特定类型。 在检查了大量XSSFWorkbook函数之后,我发现

XSSFWorkbook wb; // with proper initialization
wb.getStylesSource().getCTStylesheet().getCellStyleXfs(); 
正在返回大约40000个条目,其中大部分是

<main:xf numFmtId="0" fontId="0" fillId="0" borderId="0"/>
但是在尝试保存文件StylesTable.java时删除样式后,会抛出一个关于org.apache.xmlbeans.impl.values.XmlValueDisconnectedException的错误,我尝试了许多不同的方法,并收到了类似的错误

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

XSSFCell cell; //with proper initialization
cell.getCellStyle().getStyleXf().getXfId(); 
始终返回一个介于1和5之间的数字,尽管xml文件中有数千个条目

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

我是否严重误解了工作簿内部或POI函数


任何帮助都将不胜感激

这是什么版本的ApachePOI?如果不是最新的,你尝试升级了吗?我目前使用的是poi-3.10.1-20140818.jar,这是目前最新的稳定版本。正如我提到的,我已经看到了HSSFWorkbook对象的这一点,并且我已经看到了许多添加和设置样式的示例,但是没有一个用于删除和清理XSSForkbook中的样式。所以我希望这是可能的,但我不相信我是第一个尝试这个的人。此线程提到将xlsx文件转换为xls并使用HSSFOOptimizer,但我认为向下转换对我们来说不是一个可接受的解决方案。如果您想这样做并让它工作,您必须在StylesTable中使用
xfs
列表。最好在POI Bugzilla中打开一个增强条目,然后制作一个XSSF样式优化程序,其中可能包括一些受保护的新样式方法来帮助您
XSSFCell cell; //with proper initialization
cell.getCellStyle().getStyleXf().getXfId();