Java 基础教程

Java 面向对象

Java 高级教程

Java 笔记

java 将相关数据写入(导出)到 excel 表格文件

Java 笔记 Java 笔记


如何通过 java 将相关数据写入(导出)到 excel 表格文件,Apache Poi 给 Java 程序的 API 对 Microsoft Office 格式文件的读和写提供了最完整解决方案。除了 Apache Poi 工具外,还有一个相关工具是 JXL(Java Excel API),但不经常用,这里主要介绍 Poi 的使用方法。

引入 Apache Poi 包

第一步导入 Apache Poi jar 包。

maven 示例:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>

gradle 示例:

compile group: 'org.apache.poi', name: 'poi', version: '4.1.2'

poi jar 包内部针对不同的功能,分成了几个子模块,具体结构如下:

  • HSSF - 提供读写 Microsoft Excel XLS 格式文件的功能。
  • XSSF - 提供读写 Microsoft Excel OOXML XLSX 格式文件的功能。
  • HWPF - 提供读写 Microsoft Word DOC 格式文件的功能。
  • HSLF - 提供读写 Microsoft PowerPoint 格式文件的功能。
  • HDGF - 提供读 Microsoft Visio 格式文件的功能。
  • HPBF - 提供读 Microsoft Publisher 格式文件的功能。
  • HSMF - 提供读 Microsoft Outlook 格式文件的功能。

转换成 excel 示例

我们这里主要是使用 HSSF 模块对数据进行处理,具体示例如下:

import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

@Slf4j
public class Demo {

    private static void writeToExcel(List<String> list) throws IOException {

        if (CollectionUtils.isEmpty(list)) {
            return;
        }

        Workbook wb = new HSSFWorkbook();
        int oneSheetHeadRowNum = 1; //  头部非内容行数(如标题等)
        int oneSheetMaxRowNum = 65536;  //  excel 一个 sheet 最多支持行
        int oneSheetContentAvailableRowNum = oneSheetMaxRowNum - oneSheetHeadRowNum;

        int len = list.size();
        int needSheetSize = len / (oneSheetContentAvailableRowNum);

        log.info("needSheetSize:{}", needSheetSize);

        int j = 0;
        for (int i = 0; i <= needSheetSize; i++) {
            Sheet sheet = wb.createSheet("sheet " + i);

            Row row = sheet.createRow(0);
            row.createCell(0).setCellValue("搜索词");
            row.createCell(1).setCellValue("意图分类");
            row.createCell(2).setCellValue("详细信息");

            for (int k = 0; j < list.size() && k < oneSheetContentAvailableRowNum; k++, j++) {
                String string = list.get(j);
                Row contentRow = sheet.createRow(k + 1);
                contentRow.createCell(0).setCellValue(string);
                contentRow.createCell(1).setCellValue(string);
                contentRow.createCell(2).setCellValue(string);
            }
        }

        FileOutputStream fileOut = new FileOutputStream("intention_result.xls");
        wb.write(fileOut);
        fileOut.close();
    }
}