Apache POI 5.2.2 创建一个Excel的XSSPChart
时间: 2024-06-09 17:09:30 浏览: 176
poi-5.2.2.jar中文文档.zip
5星 · 资源好评率100%
使用Apache POI 5.2.2可以创建一个Excel的XSSPChart,具体操作步骤如下:
1. 创建一个XSSFWorkbook对象,用于操作Excel文件。
```java
XSSFWorkbook workbook = new XSSFWorkbook();
```
2. 创建一个XSSFSheet对象,用于操作Sheet页。
```java
XSSFSheet sheet = workbook.createSheet("Sheet1");
```
3. 创建一个XSSFChart对象,用于操作Chart。
```java
XSSFChart chart = sheet.createDrawingPatriarch().createChart(anchor);
```
其中,anchor可以通过XSSFClientAnchor对象设置,用于指定Chart的位置和大小。
4. 创建一个XDDFChartLegend对象,用于设置Chart的图例。
```java
XDDFChartLegend legend = chart.getOrAddLegend();
```
5. 创建一个XDDFDataSource对象,用于设置Chart的数据源。
```java
XDDFDataSource<String> categories = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(0, 0, 0, 3));
XDDFNumericalDataSource<Double> values = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 1, 0, 3));
```
其中,第一个参数为Sheet页对象,第二个参数为数据源所在单元格范围。
6. 创建一个XDDFChartData对象,用于设置Chart的数据。
```java
XDDFChartData data = chart.createData(ChartTypes.BAR, null, null);
```
其中,第一个参数为Chart类型,这里使用柱状图,第二个和第三个参数为数据源。
7. 创建一个XDDFChartData.Series对象,用于设置Chart的系列。
```java
XDDFChartData.Series series = data.addSeries(categories, values);
```
8. 设置Chart的标题和轴标签
```java
chart.setTitleText("Chart Title");
chart.getCTChart().getTitle().addNewOverlay().setVal(false);
chart.getCTChart().getTitle().addNewLayout();
chart.getCTChart().getTitle().addNewTx().addNewRich().addNewBodyPr().addNewP().addNewR().setT("Chart Title");
chart.getCTChart().getTitle().getTx().getRich().addNewP().addNewR().setT("Chart Subtitle");
XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
xAxis.setTitle("X Axis");
XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT);
yAxis.setTitle("Y Axis");
```
9. 将数据设置到Chart中
```java
chart.plot(data);
```
10. 将Chart写入Excel文件
```java
FileOutputStream fileOut = new FileOutputStream("output.xlsx");
workbook.write(fileOut);
fileOut.close();
```
完整代码示例:
```java
import java.io.FileOutputStream;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.xssf.usermodel.charts.*;
public class CreateExcelChart {
public static void main(String[] args) throws Exception {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Sheet1");
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, 0, 5, 10, 20);
XSSFChart chart = sheet.createDrawingPatriarch().createChart(anchor);
XDDFChartLegend legend = chart.getOrAddLegend();
XDDFDataSource<String> categories = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(0, 0, 0, 3));
XDDFNumericalDataSource<Double> values = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, 1, 0, 3));
XDDFChartData data = chart.createData(ChartTypes.BAR, null, null);
XDDFChartData.Series series = data.addSeries(categories, values);
chart.setTitleText("Chart Title");
chart.getCTChart().getTitle().addNewOverlay().setVal(false);
chart.getCTChart().getTitle().addNewLayout();
chart.getCTChart().getTitle().addNewTx().addNewRich().addNewBodyPr().addNewP().addNewR().setT("Chart Title");
chart.getCTChart().getTitle().getTx().getRich().addNewP().addNewR().setT("Chart Subtitle");
XDDFCategoryAxis xAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
xAxis.setTitle("X Axis");
XDDFValueAxis yAxis = chart.createValueAxis(AxisPosition.LEFT);
yAxis.setTitle("Y Axis");
chart.plot(data);
FileOutputStream fileOut = new FileOutputStream("output.xlsx");
workbook.write(fileOut);
fileOut.close();
}
}
```
阅读全文