【工具】execl生成工具SXSSFWorkbook

  1. 处理xls的excel用的workbook是HSSFWorkbook,处理xlsx的excel用的是XSSFWorkbook,导出excel的时候数据会驻留在内存中,所以当数据量大的时候容易造成内存溢出。SXSSFWorkbook是用来生成海量excel数据文件,主要原理是借助临时存储空间生成excel。POI要求3.8以上。
  2. XSSFWorkbook添加两个参数为rowAccessWindowSize和setCompressTempFiles,rowAccessWindowSize规定最新存储在内存中的条数,超过这个条数存入磁盘,setCompressTempFiles方法作用为把临时文件进行压缩
public class SXSSFWorkbookUtil {

    public static void main(String[] args) throws IOException {
        String fileUrl = "D:/TEST";//生成execl表格地址
        String[] array = {"姓名", "年龄", "性别"};
        SXSSFWorkbook sxssfWorkbook = new SXSSFWorkbook(SXSSFWorkbook.DEFAULT_WINDOW_SIZE); //默认保存100行在内存里面
        Sheet sheet = sxssfWorkbook.createSheet("测试"); //创建一个sheet
        sxssfWorkbook.setCompressTempFiles(true);//对临时文件进行压缩,减少磁盘占用空间 可能在写入表格的临时文件比报表还大

        Row row = sheet.createRow(0);//创建表头及第一行
        CellStyle cellStyle = sxssfWorkbook.createCellStyle();//设置单元格格式
        Font font = sxssfWorkbook.createFont();//设置字体格式
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);//字体加粗
        font.setColor(Font.COLOR_RED);//设置颜色
        cellStyle.setFont(font);

        for (int i = 0; i < array.length; i++) {
            sheet.setColumnWidth(i, 6000);
            Cell cell = row.createCell(i);//创建一个单元格
            cell.setCellValue(array[i]);//为每个单元格赋值
            cell.setCellStyle(cellStyle);
        }

        //写入1000行数据
        for (int j = 1; j <= 10000; j++) {
            Row row1 = sheet.createRow(j);
            for (int i = 0; i < array.length; i++) {
                Cell cell = row1.createCell(i);
                if (i == 0) {
                    cell.setCellValue("测试姓名" + j);
                } else if (i == 1) {
                    cell.setCellValue("测试年龄" + 18);
                } else {
                    cell.setCellValue("测试性别:男");
                }
            }
        }

        fileUrl = fileUrl + "/信息表格.xls";
        File file = new File(fileUrl);
        file.createNewFile();
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        sxssfWorkbook.write(fileOutputStream);
        sxssfWorkbook.dispose();// 释放workbook所占用的所有windows资源
        fileOutputStream.close();
    }

你可能感兴趣的:(常用工具方法,excel)