无法在新的ApachePOI XSSFWorkbook中创建主题

时间:2015-07-21 13:05:39

标签: xml excel themes apache-poi xssf

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

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()从一些工作簿部分获取输入流。而对于Theme输入流是空的。也许那就是问题?当我尝试(测试)创建其他对象时:

xssfWorkbook.createRelationship(XSSFRelation.CHART, XSSFFactory.getInstance());
一切都很好。

现在该怎么办?

1 个答案:

答案 0 :(得分:2)

您还需要覆盖commit方法

你最简单的赌注是抓住最近的每晚构建(直到3.13 beta 2出局),然后使用StylesTable.ensureThemesTable() method为你添加一个空的主题表