SXSSFWorkbook的简单使用(附工具类)

时间:2025-03-20 10:06:11

        在工作中使用到了POI中的SXSSFWorkbook做excel导出,本文将简单介绍SXSSFWorkbook的使用及其做excel导出的一个通用工具类。

1、简单介绍

    SXSSFWorkbook是属于apache基金会的Excel导出工具类,从其官网上可以看出SXSSFWorkbook实现了Workbook接口。
    SXSSFWorkbook是实现“BigGridDemo”策略的XSSFWorkbook的流媒体版本。SXSSFWorkbook允许编写非常大的文件而不会耗尽内存,因为在任何时候,只有可配置的一部分行保存在内存中。具体细节需要研究官方文档。

2、引入依赖

        <dependency>
            <groupId></groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
                <groupId></groupId>
                <artifactId>poi</artifactId>
                <version>4.1.2</version>
        </dependency>
        <dependency>
                <groupId></groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>4.1.2</version>
        </dependency>

3、使用

package ;

import .slf4j.Slf4j;
import .;
import .;
import ;
import .*;
import ;
import ;
import ;

import .*;
import ;
import ;
import ;
import ;

/**
 * SXSSFWorkbook导出
 *
 * @date 2022-05-30 10:50
 */
@Slf4j
public class SXSSFWorkbookExporter {

    /**
     * 表头
     */
    private String[] headerNames;
    /**
     * 工作簿
     */
    private Workbook workBook;
    /**
     * excel工作表
     */
    private Sheet sheet;

    /**
     *
     * @param headerNames 表头
     * @param sheetName sheet的名称
     */
    public SXSSFWorkbookExporter(String[] headerNames, String sheetName) {
         = headerNames;
        // 创建一个工作簿 内存中保持100条数据, 超出的部分刷新到磁盘上
        workBook = new SXSSFWorkbook(100);
        // 创建一个工作表sheet
        sheet = (sheetName);
        initHeader();
    }

    /**
     * 初始化表头信息
     */
    private void initHeader() {
        // 创建第一行
        Row row = (0);
        Cell cell = null;
        // 创建表头
        for (int i = 0; i < ; i++) {
            cell = (i);
            (headerNames[i]);
            setHeaderCellStyle(cell);
        }
    }

    /**
     * 设置表头单元格样式
     *
     * @param cell 单元格
     */
    public void setHeaderCellStyle(Cell cell) {
        // 设置样式
        CellStyle cellStyle = ();
        // 设置字体居中
        ();
        // 设置字体
        Font font = ();
        (HSSFFont.FONT_ARIAL);
        // 设置加粗
        (true);
        // 设置字号
        ((short) 13);
        (font);
        (cellStyle);
    }

    /**
     *
     * @param datas 数据,每一个map都是一行
     * @param keys key[i]代表从map中获取keys[i]的值作为第i列的值,如果传的是null默认取表头
     */
    public void createTableRows(List<Map<String, Object>> datas, String[] keys) {
        for (int i = 0, length_1 = (); i < length_1; i++) {
            if ((keys)) {
                keys = headerNames;
            }
            // 创建行(从第二行开始)
            Map<String, Object> data = (i);
            Row row = (i + 1);
            Cell cell = null;
            for (int j = 0, length_2 = ; j < length_2; j++) {
                // 单元格获取map中的key
                String key = keys[j];
                String value = (data, key, "");
                cell = (j);
                ();
                (value);
            }

        }
    }

    /**
     * 根据表头自动调整列宽度
     */
    public void autoAllSizeColumn() {
        // 如果是SXSSFSheet,需要调用trackAllColumnsForAutoSizing方法一次
        if (sheet instanceof SXSSFSheet) {
            SXSSFSheet tmpSheet = (SXSSFSheet) sheet;
            ();
        }
        for (int i = 0, length = ; i < length; i++) {
            (i);
        }
    }

    /**
     * 将数据写出到excel中
     *
     * @param outputStream
     */
    public void exportExcel(OutputStream outputStream) {
        // 导出之前先自动设置列宽
        ();
        try {
            (outputStream);
        } catch (IOException e) {
            (" exportExcel error", e);
        } finally {
            (outputStream);
        }
    }

    /**
     * 将数据写出到excel中
     *
     * @param outputFilePath
     */
    public void exportExcel(String outputFilePath) {
        // 导出之前先自动设置列宽
        ();
        FileOutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream(outputFilePath);
            (outputStream);
        } catch (IOException e) {
            (" exportExcel error", e);
        } finally {
            (outputStream);
        }
    }

    public static void main(String[] args) {
        test();
    }

    private static void test() {
        SXSSFWorkbookExporter hssfWorkExcel = new SXSSFWorkbookExporter(new String[] { "姓名", "年龄" }, "人员基本信息");
        List<Map<String, Object>> datas = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Map data = new HashMap<>();
            ("name", "name" + i);
            ("age", "age" + i);
            (data);
        }
        (datas, new String[] { "name", "age" });

        try {
            (new FileOutputStream(new File("e:/")));
        } catch (FileNotFoundException e) {
            ();
        }
    }

}