Я пытаюсь редактировать диаграммы в файле docx с помощью docx4j. Я не могу увеличить количество строк (как, например, количество баров в гистограмме) в диаграмме. Я могу уменьшить количество строк, что отлично работает. Когда я пытаюсь увеличить количество строк, значения в переменных изменяются корректно (ctNumvals и ctStrVals в коде). Но когда я открываю отредактированный документ, на диаграмме отображается только исходное количество строк (до редактирования), с последними наборами данных, которые я ввел.Редактирование диаграмм в файле docx с использованием docx4j
Вот код:
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));
Переменная «данные» является LinkedHashMap
благодарит за публикацию ответа – GBP