WordprocessingMLPackage template = WordprocessingMLPackage.load(new File(resultFile));
Chart chart = (Chart) template.getParts().get(new PartName(chartPartName));
List<Object> objects = chart.getJaxbElement().getChart().getPlotArea()
.getAreaChartOrArea3DChartOrLineChart();
//update chart values in doc
for (Object object : objects) {
if (object instanceof CTBarChart) {
List<CTBarSer> ctBarSers = ((CTBarChart) object).getSer();
for (CTBarSer ctBarSer : ctBarSers) {
List<CTNumVal> ctNumVals = ctBarSer.getVal().getNumRef().getNumCache().getPt();
List<CTStrVal> ctStrVals = ctBarSer.getCat().getStrRef().getStrCache().getPt();
while (data.size() < ctNumVals.size()) {
ctNumVals.remove(data.size());
}
while (data.size() < ctStrVals.size()) {
ctStrVals.remove(data.size());
}
while (data.size() > ctNumVals.size()) {
CTNumVal numVal = new CTNumVal();
ctNumVals.add(ctNumVals.size(), numVal);
}
while (data.size() > ctStrVals.size()) {
CTStrVal strVal = new CTStrVal();
ctStrVals.add(ctStrVals.size(), strVal);
}
ctBarSer.getVal().getNumRef().getNumCache().getPtCount().setVal(data.size());
ctBarSer.getCat().getStrRef().getStrCache().getPtCount().setVal(data.size());
for (CTNumVal ctNumVal : ctNumVals) {
ctNumVal.setV(valItr.next());
}
for (CTStrVal ctStrVal : ctStrVals) {
ctStrVal.setV(keyItr.next());
}
}
}
}
template.save(new File(resultFile));
我已经发现我做错了什么。
当我创建新条时,
while (data.size() > ctNumVals.size()) {
CTNumVal numVal = new CTNumVal();
ctNumVals.add(ctNumVals.size(), numVal);
}
while (data.size() > ctStrVals.size()) {
CTStrVal strVal = new CTStrVal();
ctStrVals.add(ctStrVals.size(), strVal);
}
默认情况下,新条形图的idx值设置为0。这使得您创建的任何条形图都是图表的第一条形图(覆盖实际的第一条形图)。只需将idx值设置为适当的值,如下所示。
while (data.size() > ctNumVals.size()) {
CTNumVal numVal = new CTNumVal();
numVal.setIdx(ctNumVals.size());
ctNumVals.add(ctNumVals.size(), numVal);
}
while (data.size() > ctStrVals.size()) {
CTStrVal strVal = new CTStrVal();
strVal.setIdx(ctStrVals.size());
ctStrVals.add(ctStrVals.size(), strVal);
}
我正在尝试使用docx4j API强制使用docx文件的权限。 文件有两个文档保护选项。
我面临的例外情况如下: java.lang.nosuchmethoderror:org.apache.xml.utils.DefaulTerrorHandler.(Z)V在org.docx4j.org.apache.xalan.transformer.transformerIdentityImpl.(TransformerIdentityImpl.transformerIdentityImpl.(
我还尝试了另一种方法:修改原始XML、解压缩docx并操作文件“word/document.XML”。当我压缩回解压缩的文件夹并将其重命名为docx时,MS Word无法打开它。
如果有人做了类似的事情,一个代码示例将非常有帮助。 提前谢了。
我想使用docx4j删除docx文件中的所有注释。 我可以使用如下所示的一段代码删除实际的注释,但我认为我也需要从主文档部分删除注释引用(否则文档已损坏),但我不知道如何做到这一点。 感谢您的指导! 我还在docx4j论坛上发布了这个问题:http://www.docx4java.org/forums/docx-java-f6/how-to-remove-all-comments-from-doc