如果我通过构造函数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());
一切都很好。
现在该怎么办?
答案 0 :(得分:2)
您还需要覆盖commit
方法
你最简单的赌注是抓住最近的每晚构建(直到3.13 beta 2出局),然后使用StylesTable.ensureThemesTable() method为你添加一个空的主题表