Apache poi excel 导入 & 导出 & 模板

 

前言

项目需求读取excel中内容(导入),读取内容数据生成excel(导出),以及自己后来完成自定义配置类,生成导入模板excel,读取模板中的内容(模板配置)。所有代码支持支07以上版本(因为apache Poi针对07版本上下分为两个不同的实现,这里只针对07级以上进行了实现)

最终效果:

  • 导入:一个配置类一段代码实现导入,实现导入数据是否符合导入条件,不符合返回错误信息,精确到每个单元格

       简单数据 :

              导入的数据(下图)

              

                代码实现(下图)

               

     树结构数据:

            导入的数据(下图)

           

            代码实现(下图)

             

  • 导出:一个配置类一段代码实现导出(单个sheet/多个sheet)

       代码实现:(下图)

       

        实现效果

          

  • 模板:一个配置类一段代码生成导入模板(实现每个单元格类型及内容限制,表头提示信息,填写提示信息,以及列数据下拉选择),填写模板后导入,同一个配置类一段代码实现数据提取

        代码实现:(下图)(TemplateConfigs为自己写的一个配置类,因为模板读取的时候用到同样的配置,所以提取了个配置类)

        

         生成的模板如下(下图)(国家列可选,每个列数据可自动校验,不符合配置条件提示)

         

         填写完模板的数据后,读取此模板的数据的代码实现如下(下图)

          

 

一、使用的技术

1.Apache poi 2.泛型 3.反射  4.工厂模式 5.适配器模式

二、学习过程

1.查看文档

  1. 官网地址:https://poi.apache.org/   官网例子:https://poi.apache.org/components/spreadsheet/quick-guide.html  API:https://poi.apache.org/apidocs/5.0/index.html
  2. 网页查询:(官网api介绍很模糊,只能摸索)
  3. 查看源码

2.过程

(以下过程都简单介绍,具体实现见<3.项目代码结构>《放在了gitlab上》,有详细的注释)

  •    读取excle内容(read)

1.读取文件,获得输入流对象

2.从文件中获取WorkBook(工作簿)

Workbook workbook workbook = WorkbookFactory.create(inputStream);

3.从WorkBook中获取Sheet(表)

//工作表对象 默认读取第一个sheet
Sheet sheet = workbook.getSheetAt(0);

4.从Sheet中获取Row(行),生成对应的泛型对象

Row row = sheet.getRow(i)

5.遍历Row(行)中Cell(单元格),给泛型对象设置属性值(这里要根据单元格的类型调用不同方法获取)

returnStr = cell.getStringCellValue();
  • 生成excel(writer)

1.创建WorkBook(工作簿)

new XSSFWorkbook();

2.创建Sheet(表)

 wb.createSheet("name");

3.创建Row(行)

sheet.createRow(index);

4.创建Cell(单元格)

row.createCell(index)
  • 生成模板,导入模板(template)

1.创建WorkBook

2.创建sheet(表)

3.创建填表提示信息

4.创建表头,并设置表头批注信息(列表头填写说明)

5.设置每列单元格的填写限制

6.输出excel

以上代码见项目中对应的业务类如下图

7.导入模板类似Read,这里不做介绍

3.项目代码

      地址:https://gitlab.com/xiaoqi329/demo_test (spring boot项目,主配置启动即可,http://localhost/excel为样例调用页面(如下图))

        

       项目结构如下图 (writer和template 结构同read)

        

4.xslx 文件探究(个人理解,仅供参考)

    编写代码过程中遇到各种问题,有时候需要分析生成的xslx文件到底有什么问题,则自己查看了xlsx文件的具体实现

1.找一个xlsx文件,更改文件为test.zip

2.打开test.zip,里面有多个文件夹(如下),主要文件存储在xl文件夹下,

3.分析xl文件下内容

sharedString.xml中的内容如下(其实就是标签列表,在sheet.xml中引用时引用的是索引)

style.xml 中就是工作簿所有的样式,其他地方引用也是索引引用

workbook.xml(略)

sheet.xml(多个sheet有多个sheet.xml) sheet中元素的属性多引入上其他元素的值

总结

  1. 官网文档有很多案例,多读实验可以少走弯路。
  2. 官网文档有所不足,api介绍较简单,单元格校验文档较少,很多问题都要慢慢实验才能实现。
  3. 有些校验不起作用时,直接操作excel完成校验功能,再对比生成的excel文件有何不同,解决问题。

能力不足,欢迎大家交流指出问题,共同进步。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值