Java如何写入Excel数据?

在Java中写入Excel文件通常使用Apache POI库,创建Workbook对象(如XSSFWorkbook),构建Sheet、Row和Cell结构,通过setCellValue方法填充数据,最后用FileOutputStream将工作簿写入磁盘文件。

在Java中写入Excel文件通常使用Apache POI库,它提供了全面的API操作Excel(支持.xls和.xlsx格式),以下是详细实现步骤:

Java如何写入Excel数据?


环境准备

  1. 添加Maven依赖

    <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>
  2. 导入关键类

    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook; // .xlsx格式
    import org.apache.poi.hssf.usermodel.HSSFWorkbook; // .xls格式
    import java.io.FileOutputStream;

基础写入步骤

示例:创建Excel并写入数据

public class ExcelWriter {
    public static void main(String[] args) throws Exception {
        // 1. 创建工作簿(.xlsx格式)
        Workbook workbook = new XSSFWorkbook();
        // 2. 创建工作表
        Sheet sheet = workbook.createSheet("员工数据");
        // 3. 创建表头行
        Row headerRow = sheet.createRow(0);
        String[] headers = {"ID", "姓名", "部门"};
        for (int i = 0; i < headers.length; i++) {
            Cell cell = headerRow.createCell(i);
            cell.setCellValue(headers[i]);
        }
        // 4. 写入数据行
        Object[][] data = {
            {1, "张三", "技术部"},
            {2, "李四", "市场部"}
        };
        for (int i = 0; i < data.length; i++) {
            Row dataRow = sheet.createRow(i + 1); // 从第2行开始
            for (int j = 0; j < data[i].length; j++) {
                Cell cell = dataRow.createCell(j);
                cell.setCellValue(data[i][j].toString());
            }
        }
        // 5. 自动调整列宽
        for (int i = 0; i < headers.length; i++) {
            sheet.autoSizeColumn(i);
        }
        // 6. 写入文件
        try (FileOutputStream fos = new FileOutputStream("员工表.xlsx")) {
            workbook.write(fos);
        }
        workbook.close();
        System.out.println("Excel文件生成成功!");
    }
}

高级功能

设置单元格样式

// 创建样式
CellStyle style = workbook.createCellStyle();
style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
// 设置字体
Font font = workbook.createFont();
font.setBold(true);
font.setColor(IndexedColors.BLUE.getIndex());
style.setFont(font);
// 应用样式到表头
for (Cell cell : headerRow) {
    cell.setCellStyle(style);
}

写入不同类型数据

Row row = sheet.createRow(4);
row.createCell(0).setCellValue(true);     // 布尔值
row.createCell(1).setCellValue(new Date());// 日期
row.createCell(2).setCellValue(5000.75);   // 数字

处理大文件(SXSSF流式写入)

// 使用SXSSFWorkbook避免内存溢出
Workbook workbook = new SXSSFWorkbook(); 
Sheet sheet = workbook.createSheet();
for (int i = 0; i < 100000; i++) {
    Row row = sheet.createRow(i);
    row.createCell(0).setCellValue("大数据行:" + i);
}
// 清理临时文件
((SXSSFWorkbook)workbook).dispose(); 

常见问题解决

  1. 文件格式问题

    • .xls(旧格式):使用 HSSFWorkbook
    • .xlsx(新格式):使用 XSSFWorkbookSXSSFWorkbook
  2. 内存溢出

    Java如何写入Excel数据?

    • 超过10万行数据时,用 SXSSFWorkbook 并设置窗口大小:
      SXSSFWorkbook workbook = new SXSSFWorkbook(100); // 保留100行在内存中
  3. 列宽失效

    • 中文自动列宽可能不准,需手动计算:
      sheet.setColumnWidth(0, 20 * 256); // 20字符宽度

最佳实践

  1. 资源关闭
    使用try-with-resources确保关闭资源:

    try (Workbook workbook = new XSSFWorkbook();
         FileOutputStream fos = new FileOutputStream("output.xlsx")) {
         workbook.write(fos);
    }
  2. 性能优化

    • 批量操作数据后再写入
    • 避免频繁创建单元格样式
  3. 异常处理

    Java如何写入Excel数据?

    try {
        // 写入逻辑
    } catch (IOException e) {
        System.err.println("文件写入失败: " + e.getMessage());
    }

引用说明

本文代码基于 Apache POI 5.2.3 版本实现,官方文档参考:Apache POI官网
Java Excel操作库对比:

  • Apache POI:功能最全面,适合复杂场景
  • EasyExcel(阿里):适合大数据量导出,内存优化更好
  • JExcelAPI:仅支持.xls格式,已停止更新

提示:生产环境建议添加文件锁机制和写入权限校验,避免并发冲突和安全问题。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/35210.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月22日 12:39
下一篇 2025年6月11日 16:38

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN