提问人:Thomas HG 提问时间:11/6/2023 更新时间:11/7/2023 访问量:78
使用 Apache POI 创建的 Excel 文件将不再显示折线图
Excel files created with Apache POI won't show line chart anymore
问:
我们在 Web 应用程序中使用 Apache POI 已有“多年”了。突然间,从我们的应用程序创建的新文件和旧文件都不会显示折线图。现在我们使用的是 5.2.3,但今年春天创建的文件,曾经打开过,也不再打开!?我得到的唯一“错误”是在 Excel 中,它说(所以其他所有内容看起来都应该如此)Removed part: /x1/drawings/drawing1.xml
如果我在(Apples)Numbers中打开折线图,甚至在(Mac)Finder的“预览”中打开它,我可以看到它。
(应该)生成图表的代码是:
XSSFDrawing drawing = sheet.createDrawingPatriarch();
XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, anchorR, 15, anchorR+20);
XSSFChart chart = drawing.createChart(anchor);
chart.setTitleOverlay(false);
chart.setTitleText(title);
List<Integer> selected = selectedMap.get("integer");
XDDFChartAxis bottomAxis = chart.createCategoryAxis(org.apache.poi.xddf.usermodel.chart.AxisPosition.BOTTOM);
bottomAxis.setTitle("");
XDDFValueAxis leftAxis = chart.createValueAxis(org.apache.poi.xddf.usermodel.chart.AxisPosition.LEFT);
leftAxis.setTitle("");
XDDFDataSource<String> ticks_xaxis = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(headerRow, headerRow, startCol, noOfCol));
Map<Integer, String> lineNames = new HashMap<>();
int count_=0;
XDDFChartData lc = null;
if (!selected.isEmpty()) {
List<XDDFNumericalDataSource<Double>> data = new ArrayList<>();
for (Integer integer : selected) {
int datar = startRow + integer;
data.add(XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(datar, datar, startCol, noOfCol)));
String lname = sheet.getRow(datar).getCell(0).getStringCellValue();
lineNames.put(count_++, lname);
}
lc = chart.createData(ChartTypes.LINE, bottomAxis, leftAxis);
for (int d=0;d<data.size();d++) {
XDDFNumericalDataSource<Double> line = data.get(d);
XDDFLineChartData.Series ser = (XDDFLineChartData.Series) lc.addSeries(ticks_xaxis, line);
ser.setTitle(lineNames.get(d), null);
ser.setSmooth(true);
ser.setMarkerStyle(MarkerStyle.NONE);
}
chart.plot(lc);
}
表格没有问题(有序列试图“读取”的数据)等等。
我知道很难看出问题是因为我无法为您提供完整的源代码,但我希望有人以前遇到过这个问题!我试图看看是否有一些依赖关系搞砸了任何东西。所以。。任何提示,我都听进去了!
答:
使用 Apache POI 的所有当前图表问题
Apache poi MS excel 损坏 -> 在包含条形图时打开使用 Apache POI 创建的文档时出错 -> 在最新版本的 Excel 中使用使用 Apache POI 生成的条形图打开工作簿时出错 -> 从头开始使用 APACHE POI 和 Java 在 powerpoint 中创建图表
好像是这样的:
版本 4.1.2 的 Apache POI 决定将数字格式设置设置为默认类别轴。但它设置了一个空字符串作为数字格式代码。Microsoft Office 2021 及以下版本具有足够的容忍度,可以忽略该空字符串数字格式。Microsoft Office 365 没有那么宽容。
不清楚为什么,在所有事情中,类别轴默认具有该设置。值轴没有。
但要使其再次工作,必须修复不正确的数字格式设置。
在上面的代码中是类别轴。那是文本而不是数字。所以数字格式应该是 ,即文本。是值轴。如果设置,这可能具有数字格式。bottomAxis
@
leftAxis
#,##0.00
因此,对上面代码的更改:
...
//repair axes number format settings
if (bottomAxis.hasNumberFormat()) bottomAxis.setNumberFormat("@");
if (leftAxis.hasNumberFormat()) leftAxis.setNumberFormat("#,##0.00");
...
评论