# 来自开发者的一些话
Excel配置在团队开发中会遇到这样或者那样的冲突,人为操作导致这样或者那样的错误。这个工具旨以我当前的公司为标准开发的,旨在通过工具的方式来减少策划方面的人为错误。
另一方面,也是为了强化我自己在python的开发能力。
如果它对你有帮助,可以Clone或者Fork
如果你有好的方案和建议,可以在Issues中,留下你宝贵的评论,它会以邮箱的方式通知我。
Excel导出json的内容,后续会陆续的更新。
工具完成初期,可能会出现在测试中没有遇到的情况,初期还是希望大家在使用工具时,务必检查输出结果是否同自己的修改一致。当遇到非常规情况,或者问题时,需要将如图的三个文件(后缀为.r0000的文件为SVN的冲突文件)保存,程序调试需要这样的三个文件
![](https://tcs-ga.teambition.net/storage/111rd799b0e5c09f4f08ddfc117547a70d44?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTU4NjE2NTQ0NSwiaWF0IjoxNTg1NTYwNjQ1LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXJkNzk5YjBlNWMwOWY0ZjA4ZGRmYzExNzU0N2E3MGQ0NCJ9.6z4K_JC752OXLDc8TrS8lu5UzuXMU7s5-MDMzRQ6R4s&download=blob.png "")
# ExcelMergeTool
基于Excel和VBA输出Json的配置系统,基于Python,Openpy和SVN的Excel冲突解决系统
开发语言版本:Python 3.6.8
开发插件:openpyxl,Installer
工具Exe地址:ExcelMergeTool/dist/ExcelMerge.exe
# 功能简介:
远端和本地冲突的时候,检查并处理对同一sheet中不同数据检查区的修改,增加与删除的变更。检查并处理新增的非备注Sheet
## 基础概念:
![](https://tcs-ga.teambition.net/storage/111q827e0bc8c70787e29fb645d8bcd5c2df?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTU4NjE2NTQ0NSwiaWF0IjoxNTg1NTYwNjQ1LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXE4MjdlMGJjOGM3MDc4N2UyOWZiNjQ1ZDhiY2Q1YzJkZiJ9.JMATnEqbVE95jwdaLfWhJX_sEHvZ02lebmnSLMFDruY&download=blob.png "")
图
### 表头:
即用于设置Json字段名的区域。宽由Sheet有效宽度决定,高为第一列中第一个数据为数字的单元格行号(减去1)决定。
如果表头出现一下冲突,则跳过当前的sheet的合并处理。
- 相对位置的批注有变更
- 字段名字的修改
- 合并单元格信息出现变化,包括新增字段,删除字段,重新拆分或者合并单元格。
![](https://tcs-ga.teambition.net/storage/111r6ebbdb23cd2584230ec93ce11ee737b9?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTU4NjE2NTQ0NSwiaWF0IjoxNTg1NTYwNjQ1LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXI2ZWJiZGIyM2NkMjU4NDIzMGVjOTNjZTExZWU3MzdiOSJ9.8XwhMaIydULYfChUD7eQX0__ydM8yej2hXPe4xGEqVc&download=blob.png "")
### Sheet有效宽度:
由表头中最长且连续不为空的行决定,数值是该行最后一个不为空的单元格决定
### 数据检查区:
一个sheet会分为若干的检查区
检查区的确立的规则:第一列单元格或合并单元格的上下限,与表头的有效宽度,确立的一个矩形区域。如图a
如果遇到下面的冲突,则跳过当前的sheet的合并处理:
冲突双方出现同一id下的数据检查区都出现变更(增删改)的状态。
第一个使用版本中,公式的相对位置的变更会触发修改变更。
例:远端修改了id为2的数据检查区中的一个数值,本地在id为2检查区下新增了一行数据。
### 常规表结构:
![](https://tcs-ga.teambition.net/storage/111qf1a9cc03c819cf7ac0123ed3afe1c571?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTU4NjE2NTQ0NSwiaWF0IjoxNTg1NTYwNjQ1LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXFmMWE5Y2MwM2M4MTljZjdhYzAxMjNlZDNhZmUxYzU3MSJ9.ttd44ANhGn4I7dn9BHVy3suceqDgDVA4wbYS9upx4a4&download=blob.png "")
### 一级合并单元格表结构:
![](https://tcs-ga.teambition.net/storage/111qc70d10d224409dbb102a9d0d0677b2a9?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTU4NjE2NTQ0NSwiaWF0IjoxNTg1NTYwNjQ1LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXFjNzBkMTBkMjI0NDA5ZGJiMTAyYTlkMGQwNjc3YjJhOSJ9.LbsTPnnzdMx_4RFjRVDl5KKDkk031YtdlcmQeNu6sKo&download=blob.png "")
### 二级合并单元格表结构:
![](https://tcs-ga.teambition.net/storage/111q9b75a210269dad0a37b97a373674bd78?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTU4NjE2NTQ0NSwiaWF0IjoxNTg1NTYwNjQ1LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXE5Yjc1YTIxMDI2OWRhZDBhMzdiOTdhMzczNjc0YmQ3OCJ9.V1bIzSk-DhmkWeHSYF7a8uDz21TdWp_wqiZgHPpxaec&download=blob.png "")
# 注意事项(务必阅读):
### 正常关闭的操作以及异常关闭的恢复:
合并流程会创建3个临时文件,程序结束时需要恢复状态,删除3个文件。关闭程序的方式应当是在结束后,只有在窗口内输入任意键,程序才能自己恢复原始状态。
异常退出的后果,会导致下一次的合并操作无法正常进行,亦或是合并逻辑错误。
异常退出后需要采用手动方案来删除临时文件。即删除 *_合并工具日志文件.txt,*_copy_here1.xlsm,*_copy_here2.xlsm 三个文件
![](https://tcs-ga.teambition.net/storage/111r222f22502a3e5a1aba6a326e04a23c10?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTU4NjE2NTQ0NSwiaWF0IjoxNTg1NTYwNjQ1LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXIyMjJmMjI1MDJhM2U1YTFhYmE2YTMyNmUwNGEyM2MxMCJ9.KMkg1_teItzye8UU2eE5teNrRD-Q2ePDTIbXLidcEHY&download=blob.png "")
![](https://tcs-ga.teambition.net/storage/111r7a6c9b30ff6e1eded57e3e474a5d8a4b?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTU4NjE2NTQ0NSwiaWF0IjoxNTg1NTYwNjQ1LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXI3YTZjOWIzMGZmNmUxZWRlZDU3ZTNlNDc0YTVkOGE0YiJ9.SGgD1X33DhG10EB47giCb2HHXwuuMqrzh05NVCq2Aq8&download=blob.png "")
### 程序运行需要关闭相关文件
以Character.xlsm为例子,程序在运行时,请务必关闭以下6个文件,有可能导致程序异常退出,如果遇到异常退出的情况,请按照【正常关闭的操作以及异常关闭的恢复】操作处理解决
![](https://tcs-ga.teambition.net/storage/111reed0301254005f9916a4b41ff0516bd6?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTU4NjE2NTQ0NSwiaWF0IjoxNTg1NTYwNjQ1LCJyZXNvdXJjZSI6Ii9zdG9yYWdlLzExMXJlZWQwMzAxMjU0MDA1Zjk5MTZhNGI0MWZmMDUxNmJkNiJ9.D_Eehei0RIK38SpKPwt-FecQZymtSCWsmZBDLLo8Fjg&download=blob.png "")
### 检查区域之外的数据有可能会丢失
由于新增和删除的处理是新增和删除行,故有可能会误删有效区域外的信息。
合并处理,不出检查和判断有效区域外的内容如下图,故不建议在有效区域外填写解释性的文字。
![](https://tcs-ga.teambition.net/storage/111q5270a4b18c59e91c8903ff6cf5ede71f?Signature=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBcHBJRCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9hcHBJZCI6IjU5Mzc3MGZmODM5NjMyMDAyZTAzNThmMSIsIl9vcmdhbml6YXRpb25JZCI6IiIsImV4cCI6MTU4NjE2NTQ0NSwiaWF0IjoxNTg1NT