POI框架学习-导入导出案例+word转为PDF实现导出

本文介绍了Apache POI框架在Java中的应用,详细讲解了Excel的导入导出,包括HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook的使用,并提供了案例。此外,还介绍了如何实现实现Word转换为PDF的导出功能。
摘要由CSDN通过智能技术生成

目录

一 POI简介

二 行数限制

三 案例(导入和导出)

3.1 导入依赖

3.2 导入案例    

3.3 导出案例(返回文件流方式)

3.4 导出案例(返回URL方式)

3.5 加载模板导出

四  实现word转为PDF导出案例


一 POI简介

        Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。是目前较流行的导入导出excel框架。

        官方网站:Apache POI - the Java API for Microsoft Documentsicon-default.png?t=N7T8https://poi.apache.org/

二 行数限制

        HSSFWorkbook

                缺点:最多只能处65536,否则会抛异常

                优点:过程中写入缓存,不操作磁盘,最后一次性吸入磁盘,速度快

        XSSFWorkbook:最大数据:1048576行,16384列,

                缺点:写数据时速度非常慢,非常耗内存,也会发生内存溢出,如100万条。
                优点:可以写较大数据量,如20万条

        SXSSFWorkbook

                优点:可以写非常大的数据量,如100万条甚至更多条写数据速度快,占用更少的内存

        注意:

  1. 过程中会产生临时文件,需要清理临时文件
  2. 默认由100条记录被保存在内存中,如果超过这数量,则最前面的数据被写入临时文件
  3. 如果想自定义内存中数据的数量,可以使用new SXSSFWorkbook(数量)

三 案例(导入和导出)

3.1 导入依赖

<dependency>
       <groupId>org.apache.poi</groupId>
       <artifactId>poi</artifactId>
       <version>3.10-FINAL</version>
</dependency>
            
<dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.10-FINAL</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>4.1.0</version>
</dependency>

3.2 导入案例    

controller入口:

@PostMapping("import")
public Response importRepayReconciliate(MultipartFile file,HttpServletRequest request){
    try {
        // 判断文件是否为空
        if (!file.isEmpty()) {
            // 文件保存路径
            String message = repayService.import(file.getInputStream(),request);
            return new Response(MessageConstants.MSG_SUCCESS, null, null);
        } else {
            return new Response(MessageConstants.MSG_SYS_ERROR, null, "文件为空,请上传文件!");
        }
    } catch (Exception e) {
        log.error("操作失败,请联系系统管理员!",e,e.getMessage());
        return new Response(MessageConstants.MSG_SYS_ERROR, null, e.getMessage());
    }
}

service类:

Workbook book = WorkbookFactory.create(inputStream); //创建工作簿
Sheet sheet = book.getSheetAt(0);//获取到工作表
int lastRowNum = sheet.getLastRowNum();//获取到表格最后一行
if (lastRowNum < 1 ) {
    return "你未导入任何数据,请添加数据后导入...";
}
Row row = sheet.getRow(2);
Cell cell = row.getCell(1);
String type = cell.getStringCellValue();

row = sheet.getRow(i);
cell = row.getCell(1);
cell.setCellType(CellType.STRING);

// 获取单元格值(为文本重要)
String value = new DataFormatter().formatCellValue(cell);


3.3 导出案例(返回文件流方式)

关键词汇总结:

方式1:

        HSSFWorkbook book = new HSSFWorkbook();  // 有行数限制 不能大于65536行
        HSSFSheet sheet = book.createSheet();

方式2:

        XSSFWorkbook book = new XSSFWorkbook();   // 没有行数限制
        XSSFSheet sheet = book.createSheet();

方式3:

        SXSSFWorkbook book = new SXSSFWorkbook();// 没有行数限制 不占内存(通用)
        book.setCompressTempFiles(true);  //开启压缩配置项

        XSSFRow titleRow = sheet.createRow(0);
        // 设置单元格宽度
        sheet.setColumnWidth(i, 2000); 

        .....

        book.write(out);

        response.flushBuffer();

        book.dispose(); //临时文件需要手动显式删除,调用dispose方法 即可

        out.close();

        book.close();

样式管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天雨编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值