Apache POI生成excel图表

时间:2018-03-05 18:14:10

标签: java excel charts apache-poi

所有

Apache POI和excel VBA相当新,我如何使用Apache POI或任何其他java lib在Java中实现类似的东西:

Excel中的VBA代码:

Sheets("Sheet 1").ChartObjects("Line Chart")
.Chart.Axes(xlValue).MaximumScale = Sheets("Sheet 1").Range("A37")

我找不到任何与此相关的图表相关API,有什么想法吗?

另一种方法是:我的目标是使用Java自动更新单元格A37并将其值作为“折线图”的xAxis Max标度,现在是否有办法直接通过POI调用此VBA代码?

谢谢,

1 个答案:

答案 0 :(得分:1)

回答当前最新的稳定版apache poi 3.17。注意XSSFChart正在开发中。因此,我们应该将XDDFChart用于更高版本。

您可以通过XSSFChart从工作表的图纸中获取List XSSFDrawing.getChartsList。从那XSSFChart获取您需要的List。然后通过XSSFChart.getAxis获取该图表的轴。然后从import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; import org.apache.poi.xssf.usermodel.charts.*; import java.io.FileInputStream; import java.io.FileOutputStream; class ReadAndWriteExcelXSSFChart { public static void main(String[] args) throws Exception { Workbook workbook = WorkbookFactory.create(new FileInputStream("WBWithLineChart.xlsm")); Sheet sheet = workbook.getSheetAt(0); Row row = sheet.getRow(36); if (row == null) row = sheet.createRow(36); Cell cell = row.getCell(0); if (cell == null) cell = row.createCell(0); cell.setCellValue(10); double valueA37 = cell.getNumericCellValue(); Drawing drawing = sheet.getDrawingPatriarch(); if (drawing instanceof XSSFDrawing) { for (XSSFChart chart : ((XSSFDrawing)drawing).getCharts()) { System.out.println(chart.getPackagePart().getPartName().getName()); if (chart.getPackagePart().getPartName().getName().endsWith("chart1.xml")) { //first chart in sheet for (XSSFChartAxis axis : chart.getAxis()) { //all axes System.out.println(axis); if (axis instanceof XSSFValueAxis) { //value axis axis.setMaximum(valueA37); // maximum = same value as in A37 System.out.println(axis.getMaximum()); } } } } } workbook.write(new FileOutputStream("WBWithLineChart.xlsm")); workbook.close(); } } 获取相应的XSSFValueAxis。然后通过XSSFChartAxis.setMaximum更改它的最大值。

示例:

{{1}}