目录
背景及目的
在工作中尝尝因需求变更,不得不梳理变更点,前后对比起来,人工费时且易出错,尤其是excel文档,一个excel文档可能包含多个sheet,无论用什么比较工具,如compare,都显得吃力,效率低下。于是,想利用手上的工具,写个比较excel的脚本,完成繁琐的比较工作。
解决思路
思路1:使用python编写脚本,获取两个excel文档,然后,对其进行分析比较。
难点:excel 文档中的模板格式如何明确?
- 若固定下来,易于后期两者的比较,但这样就成了针对特定模板的excel文档的对比
- 不固定,自适应,难度较大,目测工作量大,且难实现
思路2:手动compare 比较
工作薄里工作表不只一张sheet,而BC对比两个工作薄时,只会以工作薄保存时所停留的工作表为准进行对比。若想对比多个sheet,需要每次必须指定表格,保存关闭后,启用BC进行对比。
但也可以在用BC进行对比时,依次指定两个工作薄里需要比较的表格,按“Ctrl+S”(不必关闭工作薄),然后再回到BC的对比界面,会有如下的提示窗口,重载后,新的表格对比结果就出来了。
思路3:上述两种方式结合。
通过脚本,结合compare,对excel 进行比较。详情思路见下章节
详细说明
设计思路
关键点:BC只会以工作薄保存时所停留的工作表为准,进行两个工作表的对比
- 将Excel文件进行拆分,每一个sheet单独成为一个工作薄,将得到2组工作薄
- 使用BC对这两组工作薄进行一一比较,生成Html报表
- 最终将生成的多个Html报表,整合成一个总报表
以上工作使用Python实现
具体实现
Excel文件拆分
使用到lib库: xlrd, xlwt, pands
获取excel文件: xlrd.open_workbook(Excel_fileName1)
循环处理sheet 成 工作薄:
- 建立新的工作薄
- 读取指定excel中的sheet
- 将sheet写入到新的工作薄
Note: 使用到pands库中的API:
- ExcelWriter,
- read_excel,
- to_excel
code:
拆分结果:
BC比较且生成报表
使用到lib库: subprocess,直接使用subprocess.Popen调用BC 进行比较,并生成报告
BCompare_Path="F:\\Python_warkplace\\BeyondCompare\\BCompare.exe"
关键点:脚本的编制
data-report layout:side-by-side &
options:ignore-unimportant,display-mismatches,line-numbers &
output-to:%3 output-options:html-color %1 %2
具体可参考BC 的指导手册(BC安装路径下):.\BeyondCompare\ BCompare.chm
可根据实际情况,设置不同参数,详见手册
报表汇总
创建一个总的html, 在指定的目录中找到所有的html 文件,将其分别读出来,然后写入总的html,保存OK
PS:上网找了个代码,合并OK, 以为Html合并需要啥格式的要求,后来细看了,好像没用到,仅仅读出另存为即可。
Exe文件由于BCompare_Path="F:\\Python_warkplace\\BeyondCompare\\BCompare.exe"
是绝对路径,且不能更改。故只能自个用。
PS:有时间,可以再优化,BC选择路径,以及GUI
可根据BC的实际路径做调整BCompare_Path