700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Apache poi excel 导入 导出 模板

Apache poi excel 导入 导出 模板

时间:2022-04-20 19:54:40

相关推荐

Apache poi excel 导入  导出  模板

前言

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

最终效果:

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

简单数据

导入的数据(下图)

代码实现(下图)

树结构数据:

导入的数据(下图)

代码实现(下图)

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

代码实现:(下图)

实现效果

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

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

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

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

一、使用的技术

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

二、学习过程

1.查看文档

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

2.过程

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

读取excle内容(read)

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

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

Workbook workbook workbook = WorkbookFactory.create(inputStream);

3.从WorkBook中获取Sheet(表)

//工作表对象 默认读取第一个sheetSheet 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.项目代码

地址:/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中元素的属性多引入上其他元素的值

总结

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。