gpt4 book ai didi

java - Apache POI 设置 Excel 图表标题

转载 作者:行者123 更新时间:2023-12-03 17:37:07 25 4
gpt4 key购买 nike

我正在从头开始创建 Excel 工作簿。其中一张表包含一个图表,我想设置图表标题。

Apache POI 在 HSSFChart 上有一个 setChartTitle 方法,但 XSSFChart 和与格式无关的 Chart 都没有设置图表标题的方法。由于我需要创建 .xlsx 文件,这对我来说是个问题。

在对 POI 代码和 OOXML 规范进行了大量研究之后,我设法想出了这段代码来在新创建的图表上设置标题:

    if (chart instanceof XSSFChart) {
XSSFChart xchart = (XSSFChart) chart;
CTChart ctChart = xchart.getCTChart();
CTTitle title = ctChart.addNewTitle();
CTTx tx = title.addNewTx();
CTTextBody rich = tx.addNewRich();
rich.addNewBodyPr(); // body properties must exist, but can be empty
CTTextParagraph para = rich.addNewP();
CTRegularTextRun r = para.addNewR();
r.setT("My chart title");
}

这似乎有效 - 我可以在 Excel 2013 中加载生成的文件,并且图表具有正确的标题。

有没有更简单的方法来做到这一点?在 Excel 中创建的工作簿中更改图表标题时,我需要注意哪些问题?

最佳答案

在这个问题六年未得到解答之前,这里是答案:
您可以使用 XSSFChart.setTitleText(String title)方法。
例子:

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xddf.usermodel.chart.ChartTypes;
import org.apache.poi.xddf.usermodel.chart.XDDFChartData;
import org.apache.poi.xddf.usermodel.chart.XDDFDataSource;
import org.apache.poi.xddf.usermodel.chart.XDDFDataSourcesFactory;
import org.apache.poi.xddf.usermodel.chart.XDDFNumericalDataSource;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFChart;
import org.apache.poi.xssf.usermodel.XSSFDrawing;

public class Chart {

public static void main(String[] args) throws Exception {
try (Workbook wb = new XSSFWorkbook(); FileOutputStream fileOut = new FileOutputStream("chart.xlsx");) {
Sheet sheet = wb.createSheet("Sheet1");

XSSFDrawing drawing = (XSSFDrawing)sheet.createDrawingPatriarch();
XSSFChart chart = drawing.createChart(drawing.createAnchor(0, 0, 0, 0, 0, 0, 12, 12));


// ---------------------> Here we set the title
chart.setTitleText("My chart title");
// <---------------------


XDDFDataSource<String> cat = XDDFDataSourcesFactory.fromArray(new String[]{"A","B","C","D"});
XDDFNumericalDataSource<Double> val = XDDFDataSourcesFactory.fromArray(new Double[]{1d, 2d, 3d, 4d});

XDDFChartData data = chart.createData(ChartTypes.PIE, null, null);
data.setVaryColors(true);
XDDFChartData.Series series = data.addSeries(cat, val);
series.setTitle("Series", null);
chart.plot(data);

wb.write(fileOut);
} catch (Exception e) {
e.printStackTrace();
}
}
}
我明白 XSSFChart.setTitleText("My chart title")不可用,当这个问题被问到时。

关于java - Apache POI 设置 Excel 图表标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30532612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com