2015-07-21 73 views
2

如果我通过构造函数XSSFWorkbook()创建XSSFWorkbook,是否可以创建空主题?我可以创建新的主题,但不完全。我可以创建文件content_types.xml两个条目和/xl/_rels/workbook.xml.rels:无法在新的ApachePOI中简单创建主题XSSFWorkbook

XSSFWorkbook xssfWorkbook = new XSSFWorkbook(); 
POIXMLDocumentPart docThemePart = xssfWorkbook.createRelationship(XSSFRelation.THEME, XSSFFactory.getInstance(), 1); 

通常情况下这是不可能的ApachePOI,因为它会导致错误。我不得不修改ApachePOI ThemesTable类 - 我加的构造(!):

public ThemesTable() { super(); } 

然后上面的函数创建文件/xl/theme/theme1.xml太多,但它是空的。如何填写此文件?如果我得到主题

ThemesTable theme = (ThemesTable) docThemePart; 

并改变它,内容不写入theme.xml。如何填写此文件? 我检查了Zip创建。 ZipPartMarshaller类中的方法marshall()从某些工作簿部分获取输入流。而对于主题输入流是空的。也许这就是问题所在?当我尝试(用于测试)创建其他对象时:

xssfWorkbook.createRelationship(XSSFRelation.CHART, XSSFFactory.getInstance()); 

一切都很好。

现在该做什么?

回答

2

你需要重写commit方法太

你的最简单的办法就是抓住最近每晚构建(直到3.13 Beta 2的是输出),然后使用StylesTable.ensureThemesTable() method有一个空的主题表为你添加

+0

谢谢,现在一切正常。 – Piotr