Excel文件内容比对 -- Java Apache Poi

  • 代码结构
  • 代码运行结果
  • 测试用例
  • 工具使用前提条件
  • 待完善的点

在某些项目中,报表比对是测试的一大内容。比如,在某版本下生成baseline report作为标准答案,新代码进来后,再次生成report,跟baseline report作比较,确保改动没有引入差异。报表多以excel文件形式导出,用工具进行excel文件比对十分有用。

Apache POI 是一个很好的处理microsoft office documents的java库,通过它可以读写word文档,读写Excel文件,读写power point文件,还有visio等等,功能十分强大。

Apache Poi 官方文档请见链接link。

这里,我建了一个maven项目,使用了poi里面的xssf读.xlsx格式的excel文件(如果想要操作.xls格式的excel文件,则必须使用poi里面的hssf),然后比对source和target文件的差异,并将差异输出。同时使用了JUnit进行代码的单元测试。

工程已Push至github link。Jar包也已release至github link。

使用如下命令运行jar包:

java - jar excelComparison.jar sourceExcelPath targetExcelPath

代码结构

代码结构如下图所示:

  • SheetData类存储sheet数据:sheet名,sheet有哪些列,sheet的column index与列名的映射关系(Map),最后是sheet的数据(List < List < String> >)
  • WorkbookData类则是有若干个SheetData组成(List < SheetData >)
  • Utility包里的ExcelUtility类放了用来读excel的静态方法
  • 最后DifferenceEngine类比较sheet数据并输出差异

代码运行结果

代码运行结果如下所示,按照sheet输出差异,sheet name取自source excel,Discrepancy summary将所有有差异的列及列名汇总起来(列名取自source excel),接下来按行将source和target单元格不一致的输出

Sheet Name: [Sheet 1]
Discrepancy summary: Column A(title), Column C(album), Column D(isFound)
Row 7Cell A7: source -- , target -- Title that not in sourceCell C7: source -- star, target -- @*&Cell D7: source -- , target -- 0
Row 8Target row null...
Row 9Target row null...
Row 10Target row null...
----------------------------------------------------
Sheet Name: [Sheet 2]
Discrepancy summary: Column A(555)
Row 3Cell A3: source -- , target -- 777
----------------------------------------------------
Source excel does not have sheet 3

测试用例

已经在如下场景测试过工具,运行结果无误:

  1. 普通情况下source和target sheet/行/列数量都一致时,source和target的差异正确识别输出
  2. source cell或者target cell为空时,差异正确识别输出
  3. source sheet和target sheet行数不一致时,工具正常运行并输出
  4. source sheet和target sheet列数不一致时,工具正常运行并输出
  5. source和target的sheet数量不一致,工具正常运行并输出

工具使用前提条件

要想工具正常运行,必须满足以下条件:

  1. 必须是2007版的excel
  2. excel文件里的列名不为空
  3. source excel和target excel里面的sheet必须是正确对应的,工具不会按照sheet name去匹配它们
  4. source excel和target excel里的列名必须是正确对应的,工具不会智能去匹配它们

待完善的点

目前所有单元格都是按照String进行严格比对的。有些时候如果数值差异在一定范围内也可以接受的话,工具则处理不了。后续可以添加配置文件,由用户自行配置各个列的格式(String,或者value,或者date等等),以及value的tolerance

Excel文件内容比对 -- Java Apache Poi相关推荐

  1. 使用POI读取excel文件内容

    1.前言 项目中要求读取excel文件内容,并将其转化为xml格式.常见读取excel文档一般使用POI和JExcelAPI这两个工具.这里我们介绍使用POI实现读取excel文档. 2.代码实例: ...

  2. 【JavaWeb开发】使用java实现简单的Excel文件的导入与导出(POI)

    前言:在实际的开发中,我们经常需要用户在界面中输入大量重复且有规律的数据,但是一个表单一个表单的填写效率过慢,而且过多的表单也会给JavaWeb的业务逻辑开发带来不小的困扰,所以我们可以使用一个Exc ...

  3. Java 读取excel文件内容插入到数据库

    Java读写Excel的包是Apache POI. JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel ...

  4. JAVA Apache POI解析docx格式的word文件并提取带样式文本

    关于JAVA Apache POI读取word文档,网上资料很多,但是大多数还是仅仅提取文档中的纯文本,好一点的,也就提取所有图片,但是,word文档本身是具有样式的,这样简单粗暴的提取就会丢失字体. ...

  5. Java多线程读取excel文件_解决springboot 多线程使用MultipartFile读取excel文件内容报错问题...

    springboot项目开启多线程 启动类加注解开启 @EnableAsync,实现类方法加注解 @Async 前端页面 报错信息 java.io.FileNotFoundException: C:\ ...

  6. java中excel文件内容读取

    如果使用的maven项目,导入excel文件内容的时候需要引入以下依赖 <dependency>     <groupId>org.apache.poi</groupId ...

  7. 使用java Apache poi 根据word模板生成word报表

    使用java Apache poi 根据word模板生成word报表 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https ...

  8. [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)

    [实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能) 基于Apache POI对Word进行操作 一.基于Apache POI封装的word文档工具V1. ...

  9. apache poi使用例_使用java Apache poi 根据word模板生成word报表例子

    [实例简介] 使用java Apache poi 根据word模板生成word报表 仅支持docx格式的word文件,大概是word2010及以后版本,doc格式不支持. 使用说明:https://b ...

  10. 通用读取Excel文件内容的模板设计

    Excel格式文件是最为常用的文件之一,在我们开发的软件中,一般需要把一些报表或表格导出为Excel格式文件,也需要读取Excel格式文件中表格数据.因此,Excel格式文件也成为不同软件间数据交换的 ...

最新文章

  1. 【Android】ViewPager实现无限循环滚动
  2. 项目实践 | 一文览尽人脸打卡全过程
  3. (转)Linux下C++开发初探
  4. python拆分列表元素_Python将列表拆分为一个元素 - python
  5. 主成分分析(Principal components analysis)
  6. 用户登陆_「python学习笔记」用户登陆需求实现(for/if/str知识点)
  7. 安装Conda并在Conda下安装jupyter notebook
  8. 《C++ Primer》14.1节练习
  9. 纵横免root框架打不开应用怎么办_很好用的软件多开神奇安卓欧皇十框架!!!...
  10. C#中结构体定义并转换字节数组
  11. Atitti.dw cc 2015 绿色版本安装总结
  12. python函数进阶小结_Python 函数3000字使用总结
  13. git上传本地文件方法
  14. 2019最烂密码榜单出炉,教你设置神级密码!
  15. WebWork深入浅出 (转贴)http://www.blogjava.net/moxie/archive/2006/10/20/76375.html
  16. Linux版主机卫士安装使用
  17. 算法(字符串)——重复的子字符串
  18. 普及练习场 深度优先搜索 八皇后
  19. 从mp4中提取wav音频文件
  20. 数据结构课程设计报告——Huffman编码

热门文章

  1. java并发圣经,差距不止一星半点!Github星标85K的性能优化法则圣经
  2. 介绍下JS里4种实现页面跳转的方法
  3. 机器学习——神经网络(四):BP神经网络
  4. 适合英语学习的100部电影
  5. 【已解决】微信小程序web-view嵌套H5,使用setStorageSync,localStorage.setItem有时候失效的问题
  6. 计算机关机后 为何会亮,Win10系统电脑关机后主机电源灯依然亮着怎么解决
  7. 【IDEA】IntelliJ IDEA使用教程(2019图文版)
  8. 【开源微信】Java实现基于Redis公众号模板消息队列
  9. 【交换安全】DAI - Dynamic ARP Inspection 详解
  10. postman 生成html测试报告