Skip to content

Commit 88911ef

Browse files
committed
Update doc
1 parent 6ef6be0 commit 88911ef

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

excel_combine/README.md

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
工作中经常遇到一种繁琐的事情。例如绩效考核,晋升调薪,固定资产盘点,团建出游时,部门秘书发来一个全部门的Excel文件,各小组Leader拆分出自己团队的Excel文件。下发给每个成员。成员填写完毕后发回给小组Leader,小组Leader汇总后发给部门秘书。部门秘书再汇总各小组Excel到一个完整的大Excel文件。
2-
**吐槽:由于种种原因,我司内网Web OA系统建设不足,很多事情都以Excel分发和汇总。**
1+
工作中经常遇到一些繁琐事情,例如绩效考核,晋升调薪,固定资产盘点,团建出游时,部门秘书发来一个全部门的Excel文件,各小组Leader拆分出自己团队的Excel文件。下发给每个成员。成员填写完毕后发回给小组Leader,小组Leader汇总后发给部门秘书。部门秘书再汇总各小组Excel到一个完整的大Excel文件。
32
一直没有找到方便好用的Excel多文件合并工具。于是自己动手撸一个Python脚本,一键自动合并。
3+
**吐槽:由于种种原因,我司内网Web OA系统建设不足,很多事情都以Excel分发和汇总。**
44

55
### 一键执行
6+
67
为了方便非技术人员使用,不添加任何启动参数,直接将脚本放在Excel文件夹根目录,双击执行。
78
也不需要指定合并汇总文件名,`combine.xlsx`这个名字的重复率很低,使用者留意即可。
9+
810
```Python
911
if __name__ == "__main__":
1012
FROM_DIR = os.getcwd()
@@ -13,11 +15,14 @@ if __name__ == "__main__":
1315
```
1416

1517
### openpyxl
18+
1619
目前主流Office版本支持Excel 2010格式,即xlsx后缀名。如果源文件是xls后缀名,直接另存为xlsx即可。因此使用openpyxl库读写Excel文件,忽略xls后缀名文件。
1720
[openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files](https://openpyxl.readthedocs.io/en/default/)
1821

1922
### 遍历文件夹,查找Excel文件
23+
2024
使用os.walk()
25+
2126
```Python
2227
_results = []
2328
for _root, _dirs, _files in os.walk(from_dir):
@@ -27,8 +32,10 @@ _results = []
2732
return _results
2833
```
2934

30-
### 注意:删除合并汇总文件,即combine.xlsx。
35+
### 注意:删除合并汇总文件,即combine.xlsx
36+
3137
合并之前,删除结果文件,以防数据错误。
38+
3239
```Python
3340
_result = search_file(from_dir)
3441
try:
@@ -39,16 +46,19 @@ return _result
3946
```
4047

4148
### 多文件重复数据清理
49+
4250
+ 如何确定Excel中每行数据是唯一的?
4351
+ 如何检测重复的Excel文件(例如文件名不同,内容相同)?
4452
+ 如何合并不同格式(行,列)的Excel文件?
4553

4654
这里设定一些潜规则:
55+
4756
+ Excel第一行必须是Title标题。
4857
+ Excel第一列必须是唯一Key。例如工号,邮箱等全局唯一值。
4958

5059
因此使用 Python 内建的 collections 集合模块的 OrderedDict 有序字典,以第一列为Key。
5160
完整的读取Excel文件并建立内存字典如下:
61+
5262
```Python
5363
_wb = load_workbook(excel_file, read_only=True)
5464
_ws = _wb.active
@@ -67,14 +77,17 @@ _wb.close()
6777
return _title, _items
6878
```
6979

70-
### 如何判断2个字典的元素一致?
80+
### 如何判断2个字典的元素一致
81+
7182
Python內建了强大的[operator](https://docs.python.org/3/library/operator.html)
83+
7284
```Python
7385
if not operator.eq(dict_src, dict_dst):
7486
print('Warning: dict elements are different!')
7587
```
7688

7789
### 最后把数据写入Excel文件
90+
7891
```Python
7992
_wb = Workbook()
8093
_ws = _wb.active
@@ -85,8 +98,8 @@ _wb.save(excel_file)
8598
```
8699

87100
### 遗留的坑
101+
88102
+ 没有处理多个Sheet的Case。
89103
+ 没有处理Excel公式计算。
90104

91-
### 源码见GitHub
92-
https://github.com/9468305/python-script/tree/master/excel_combine
105+
### [GitHub源码](https://github.com/9468305/python-script/tree/master/excel_combine)

0 commit comments

Comments
 (0)