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

Unable to simply create Theme in new ApachePOI XSSFWorkbook

如果我通过构造函数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 class - 我添加了构造函数:

public ThemesTable() { super(); }

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

ThemesTable theme = (ThemesTable) docThemePart;

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

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

一切都很好。

现在怎么办?

您还需要覆盖 commit 方法

你最简单的选择是获取最近的夜间构建(直到 3.13 beta 2 发布),然后使用 StylesTable.ensureThemesTable() method 为你添加一个空主题 Table