使用Java为Excel工作簿添加第二个Sheet页的内容

在现代软件开发中,操作Excel文件是一项常见需求,特别是在数据处理、报告生成和数据分析等场景中。Java可以通过Apache POI库来方便地读写Excel文件。本期文章将介绍如何使用Java为一个Excel工作簿添加一个新的Sheet页及其内容,从而解决一些实际问题。

实际问题

假设我们需要生成一个包含公司销售数据的Excel文件。这个文件包含两个Sheet,其中一个Sheet展示不同产品的销售数据,另一个Sheet展示月度销售汇总。这个需求在许多业务分析报告中非常常见。

环境准备

在开始编写代码之前,请确保你已经在你的项目中添加了Apache POI库的依赖。如果使用Maven,可以在pom.xml中添加以下依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

实现步骤

下面是我们将要完成的步骤:

  1. 创建一个新的Excel工作簿
  2. 添加第一个Sheet,填充一些销售数据
  3. 添加第二个Sheet,填充月度销售汇总的数据
  4. 将工作簿写入文件

代码示例

下面是一段完整的Java代码示例,展示了如何实现上述步骤。

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelExample {

    public static void main(String[] args) {
        // 创建一个工作簿
        Workbook workbook = new XSSFWorkbook();
        
        // 添加第一个Sheet:销售数据
        Sheet salesSheet = workbook.createSheet("销售数据");
        createSalesData(salesSheet);
        
        // 添加第二个Sheet:月度销售汇总
        Sheet summarySheet = workbook.createSheet("月度销售汇总");
        createSalesSummary(summarySheet);
        
        // 将工作簿写入文件
        try (FileOutputStream fileOut = new FileOutputStream("销售数据.xlsx")) {
            workbook.write(fileOut);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 结束时关闭工作簿
        try {
            workbook.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void createSalesData(Sheet sheet) {
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("产品名称");
        headerRow.createCell(1).setCellValue("销售数量");
        headerRow.createCell(2).setCellValue("单价");
        
        Object[][] salesData = {
            {"产品A", 100, 20.5},
            {"产品B", 150, 30.0},
            {"产品C", 200, 15.0}
        };
        
        int rowNum = 1;
        for (Object[] rowData : salesData) {
            Row row = sheet.createRow(rowNum++);
            int colNum = 0;
            for (Object field : rowData) {
                row.createCell(colNum++).setCellValue(field.toString());
            }
        }
    }

    private static void createSalesSummary(Sheet sheet) {
        Row headerRow = sheet.createRow(0);
        headerRow.createCell(0).setCellValue("月份");
        headerRow.createCell(1).setCellValue("总销售额");
        
        Object[][] summaryData = {
            {"一月", 2000.0},
            {"二月", 4500.0},
            {"三月", 3000.0}
        };
        
        int rowNum = 1;
        for (Object[] rowData : summaryData) {
            Row row = sheet.createRow(rowNum++);
            int colNum = 0;
            for (Object field : rowData) {
                row.createCell(colNum++).setCellValue(field.toString());
            }
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.

状态图

在整个编码过程中,我们需要清晰地了解程序的工作流程。以下是描述程序状态的状态图:

创建工作簿 添加销售数据Sheet 添加月度销售汇总Sheet 写入文件

数据可视化

在实际分析数据时,数据的可视化呈现尤为重要。我们可以使用饼状图来展示每种产品的销售比例。以下是一个饼状图的示例,假设我们将每种产品的销售数量转为百分比进行展示:

产品销售比例 31% 47% 22% 产品销售比例 产品A 产品B 产品C

结论

本文详细介绍了如何使用Java和Apache POI库为Excel工作簿添加第二个Sheet页的内容,并通过示例代码详细演示了实际操作步骤。同时,提供了状态图和饼状图以帮助读者更好地理解数据流和展示。通过这样的方式,我们可以有效生成报告并帮助商业决策。希望这篇文章能在你的开发工作中提供实用的帮助!