在本文中,我们将学习如何使用Java生成统计图表并将其导出到Word文档。我们将使用Apache POI库来操作Word文档,以及JFreeChart库来创建统计图表。
1. 准备工作
首先,确保你已经安装了以下库:
- Apache POI:用于操作Word文档
- JFreeChart:用于创建统计图表
你可以通过Maven或Gradle将它们添加到你的项目中。这里是Maven的依赖项:
<dependencies>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.5.3</version>
</dependency>
</dependencies>
2. 创建统计图表
首先,我们将使用JFreeChart库创建一个简单的柱状图。以下是创建一个简单柱状图的示例代码:
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class BarChartDemo extends ApplicationFrame {
public BarChartDemo(String applicationTitle, String chartTitle) {
super(applicationTitle);
JFreeChart barChart = ChartFactory.createBarChart(
chartTitle,
"Category",
"Score",
createDataset(),
PlotOrientation.VERTICAL,
true, true, false);
ChartPanel chartPanel = new ChartPanel(barChart);
chartPanel.setPreferredSize(new java.awt.Dimension(560, 367));
setContentPane(chartPanel);
}
private DefaultCategoryDataset createDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(15, "Product A", "2010");
dataset.addValue(20, "Product A", "2011");
dataset.addValue(25, "Product A", "2012");
dataset.addValue(30, "Product B", "2010");
dataset.addValue(35, "Product B", "2011");
dataset.addValue(40, "Product B", "2012");
return dataset;
}
public static void main(String[] args) {
BarChartDemo chartDemo = new BarChartDemo("Bar Chart Demo", "Product Scores by Year");
chartDemo.pack();
RefineryUtilities.centerFrameOnScreen(chartDemo);
chartDemo.setVisible(true);
}
}
运行上述代码,你将看到一个包含两个产品(Product A和Product B)在不同年份(2010、2011和2012)得分的柱状图。
3. 将图表导出到Word文档
接下来,我们将使用Apache POI库将生成的图表导出到Word文档。以下是将图表导出到Word文档的示例代码:
import org.apache.poi.xwpf.usermodel.*;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ChartToWord {
public static void main(String[] args) throws IOException {
// 创建一个新的Word文档
XWPFDocument document = new XWPFDocument();
// 创建一个段落
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("这是一个简单的柱状图:");
// 创建统计图表
JFreeChart barChart = createBarChart();
// 将图表保存为图片
BufferedImage image = ChartUtilities.saveChartAsPNG(new File("chart.png"), barChart, 600, 400);
// 将图片添加到Word文档
XWPFPictureData pictureData = document.addPictureData(ImageIO.read(new File("chart.png")), XWPFDocument.PICTURE_TYPE_PNG);
XWPFParagraph pictureParagraph = document.createParagraph();
XWPFRun pictureRun = pictureParagraph.createRun();
pictureRun.addPicture(pictureData, XWPFDocument.PICTURE_TYPE_PNG, "chart.png", Units.toEMU(600), Units.toEMU(400));
// 保存Word文档
FileOutputStream out = new FileOutputStream("chart.docx");
document.write(out);
out.close();
document.close();
}
private static JFreeChart createBarChart() {
// ... 与上面的示例代码相同 ...
}
}
运行上述代码,你将在当前目录下生成一个名为chart.docx的Word文档,其中包含一个段落和一张柱状图的图片。
至此,我们已经学会了如何使用Java生成统计图表并将其导出到Word文档。希望本文对你有所帮助!