我使用Apache POI 4.1.2从XLSx文件中加载图表数据,解析后用chartjs4java转换成ChartJS JSON格式,目的是在web应用中显示excel数据。
我的问题涉及从apache POI(扩展名为poi-ooxml-schema
)加载数据。
如果计算机已升级数据(未打开Excel),则不会使用新值升级图表数据。
它似乎位于lib上的NumCache功能。
但是我不知道如何在没有这种缓存的情况下加载数据。
复制步骤
1.创建一个简单的xlsx文件example。
1.使用外部工具打开并升级此文件**(不使用Excel**)。
例如,here就是一个例子,使用Apache POI库和Java代码。
3.尝试在单独的代码中从Apache POI获取图表数据。
这里是一个代码片段,我加载和浏览到我的图表数据。
public LineDataset getDataset(CTLineSer ctLineSer, CTPlotArea plot, List<CTUnsignedInt> axIdList) {
LineDataset dataset = new LineDataset();
int count = 0;
dataset = this.setLabelToDataset(dataset, ctLineSer);
CTNumData ctStrVals = ctLineSer.getVal().getNumRef().getNumCache();
for (int i = 0; i < Integer.parseInt(String.valueOf(ctStrVals.getPtCount().getVal())); i++) {
// My code here to parse data
}
}
1.最后,我将加载的数据以chartjs显示。
1.它仍然显示旧数据。
只有当我用Excel打开和关闭(保存但不做任何其他事情)文件时,才会加载正确的数据。
尝试
我做了以下尝试,没有任何成功的结果
- 试用
setForceFormulaRecalculation
法进行力值计算
workbook.setForceFormulaRecalculation(true);
- 我一直在寻找一种其他的方法来加载数据与CTPlotArea类在Apache POI文档没有任何结果
1条答案
按热度按时间x4shl7ld1#
Apache POI既不呈现工作表,也不呈现图表,也不呈现表格,也不呈现数据透视表......它只能读取Excel文件,并能够在打开文件时更改Excel呈现的静态文件内容。
因此,如果您正在更新工作表数据,Apache POI将不会自动更新相关的图表数据。只有Exel会在下次打开更改的文件时进行渲染。幸运的是,Apache POI从版本4开始也可以使用
XDDF
更新图表数据。因此,在更新工作表数据后,您还可以使用XDDFChartData.Series.replaceData
和XDDFChartData.Series.plot
更新图表数据。以下完整的示例显示了这一点。它使用您的
simple.xlsx
。两个System.out.println
部分都显示图表数据值在updateChartData
之后发生了更改。免责声明:这是一个SSCCE。它不意味着是生产性代码。方法
updateChartData
仅限于类别数据和系列数据在列中的数据源。