利用SXSSFWorkbook导出excel

项目需要一次性导出几十万数据,于是乎就SXSSFWorkbook导出excel了,写了个导出的工具类,还能要完善它,这个只是1.0版本,但是基本需求能够满足了

package com.fnst.frame.core.common.excel;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.RichTextString;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * SXSSFWorkbook 导出 excel工具类
 * Created by loup on 2017/12/4.
 */
public abstract class ExcelSXSSFWriter {

    /**
     * 写入标题
     *
     * @param sheet
     * @param rowNum 第几行的行号
     * @param values key:第几列的列号  value:值
     */
    public static void genSheetHead(Sheet sheet, int rowNum, Map<Integer, Object> values) {

        Row row = sheet.createRow(rowNum);
        for (Integer cellNum : values.keySet()) {
            Cell cell = row.createCell(cellNum);
            Object value = values.get(cellNum);
            generateValue(value, cell);
        }
    }

    /**
     * @param row
     * @param cellNum 第几列的列号
     * @param value   值
     */
    public static void createCell(Row row, int cellNum, Object value) {
        Cell cell = row.createCell(cellNum);
        generateValue(value, cell);
    }

    private static void generateValue(Object value, Cell cell) {
        if (value instanceof String) {
            cell.setCellValue((String) value);
        } else if (value instanceof Boolean) {
            cell.setCellValue((Boolean) value);
        } else if (value instanceof Double) {
            cell.setCellValue((Double) value);
        } else if (value instanceof Date) {
            cell.setCellValue((Date) value);
        } else if (value instanceof Calendar) {
            cell.setCellValue((Calendar) value);
        } else if (value instanceof RichTextString) {
            cell.setCellValue((RichTextString) value);
        }
    }

    public static void main(String[] args) throws Exception {

        //输入模板文件
        XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream("F:\\test\\ceshi.xlsx"));
        SXSSFWorkbook workbook = new SXSSFWorkbook(xssfWorkbook, 1000);

        //导出文件
        File file = new File("F:\\test\\test2.xlsx");

        long start = System.currentTimeMillis();
        for (int i = 0; i < 2; i++) {
            Sheet sheet = workbook.getSheet("sheet" + (i + 1));
            if (sheet == null) {
                sheet = workbook.createSheet("sheet" + (i + 1));
            }
//            生成标题
            Map<Integer, Object> firstTitles = new HashMap<>();
            firstTitles.put(0, "部门:");
            firstTitles.put(1, "test12221");
            firstTitles.put(7, "时间:");
            firstTitles.put(8, "2017-09-11");
            genSheetHead(sheet, 0, firstTitles);

            Map<Integer, Object> twoTitles = new HashMap<>();
            twoTitles.put(0, "工号:");
            twoTitles.put(1, "test12221");
            twoTitles.put(2, "姓名:");
            twoTitles.put(3, "aaaa");
            genSheetHead(sheet, 1, twoTitles);

            for (int rownum = 2; rownum < 100000; rownum++) {
                Row row = sheet.createRow(rownum);
                int k = -1;
                createCell(row, ++k, "第 " + rownum + " 行");
                createCell(row, ++k, 34343.123456789);
                createCell(row, ++k, "23.67%");
                createCell(row, ++k, "12:12:23");
                createCell(row, ++k, "2014-10-<11 12:12:23");
                createCell(row, ++k, "true");
                createCell(row, ++k, "false");
                createCell(row, ++k, "fdsa");
                createCell(row, ++k, "123");
                createCell(row, ++k, "321");
                createCell(row, ++k, "3213");
                createCell(row, ++k, "321");
                createCell(row, ++k, "321");
                createCell(row, ++k, "43432");
                createCell(row, ++k, "54");
                createCell(row, ++k, "fal45se");
                createCell(row, ++k, "fal6se");
                createCell(row, ++k, "fal64321se");
                createCell(row, ++k, "fal43126se");
                createCell(row, ++k, "432432");
                createCell(row, ++k, "432432");
                createCell(row, ++k, "r54");
                createCell(row, ++k, "543");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1a");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
                createCell(row, ++k, "few1");
            }

        }
        FileOutputStream out = new FileOutputStream(file);
        workbook.write(out);

        System.out.println((System.currentTimeMillis()-start));
        out.close();
    }

}


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值