Java使用POI写(创建)Excel

导入依赖

<!--xls(03版本excel)-->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi</artifactId>
	<version>5.2.2</version>
</dependency>

<!--xlsx(07版本excel)-->
<dependency>
	<groupId>org.apache.poi</groupId>
	<artifactId>poi-ooxml</artifactId>
	<version>5.2.0</version>
</dependency>

写(创建)一个excel

public class ExcelwriteTest {
    //生成文件位置
    private static final String PATH="D:\\";
    @Test
    public void testWrite() throws Exception {
        /**
         * 创建一个工作簿
         * Workbook有三个常用实现类
         * 1.HSSFWorkbook 03版xls
         * 2.XSSFWorkbook 07版xlsx
         * 3.SXSSFWorkbook 可以理解为第二种的plus版,增加读写速度
         */
        Workbook workbook = new HSSFWorkbook();
        //创建一个工作表sheet
        Sheet sheet = workbook.createSheet("03版写入测试");
        //创建一行(0表示创建的是第一行)
        Row row1 = sheet.createRow(0);
        //创建一个单元格(这个单元格表示的是第一行第一列的单元格,即坐标(1,1))
        Cell cell11 = row1.createCell(0);
        //给这个单元格赋值
        cell11.setCellValue("坐标(1,1)");
        //生成Excel文件(使用io流),注:文件后缀要与excel版本对应
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "03版excel测试写入.xls");
        //写入
        workbook.write(fileOutputStream);
        //文件写完后关闭流
        fileOutputStream.close();
        System.out.println("03版excel创建完成");
        //若想要创建07版本仅需修改两处,1.创建工作簿出改为new XSSFWorkbook(); 2.生成文件名后缀要对应07版本改为.xlsx
    }
}

当写入大量数据时03版和07版的区别
大文件写入03版(HSSF):
优点:写入过程中不操作磁盘,而是先都写入缓存,最后一次性写入磁盘。
缺点:最多写入65536行数据,超出则抛出异常。

大文件写入07版(XSSF):
优点:可以写入较大数据量,如10万。
缺点:写入数据非常慢,非常耗内存,当数据量过大也会内存溢出,如100万。

正因为07版XSSF有这些缺点所以有了plus版SXSSF
SXSSF:可以写入非常大数据量百万级,写入速度快,占用内存少。过程中会产生临时文件,需要清理。(如广泛使用,仍需大量内存)。
测试写入速度

    @Test
    public void testSpeed() throws Exception {
        long beginTime = System.currentTimeMillis();
        //创建一个工作簿
        Workbook workbook = new HSSFWorkbook();
        //创建一个工作表sheet
        Sheet sheet = workbook.createSheet("03版写入速度测试");
        //写入数据
        for (int rowNum = 0; rowNum < 65536; rowNum++) {
            //循环创建行,注意03版最多写入65536行
            Row row = sheet.createRow(rowNum);
            for (int cellNum = 0; cellNum <= 6; cellNum++) {
                //循环创建单元格,这里每行5个
                Cell cell = row.createCell(cellNum);
                cell.setCellValue(cellNum);
            }
        }
        System.out.println("数据准备完成");
        //生成Excel文件(使用io流),注:文件后缀要与excel版本对应
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "03版excel测试写入速度.xls");
        //写入
        workbook.write(fileOutputStream);
        //文件写完后关闭流
        fileOutputStream.close();
        //清除临时文件,使用SXSSF时开启下面这句话
        //((SXSSFWorkbook)workbook).dispose();
        long endTime = System.currentTimeMillis();
        System.out.println("数据写入完成,耗时:" + (double) (endTime - beginTime) / 1000);
        //同理,测试XSSFWorkbook和SXSSFWorkbook时,只需修改创建的工作簿对象和生成文件后缀名
    }

在这里插入图片描述
其他记录文章
POI读取Excel
POI读取excel中公式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值