Python自动化办公

任务场景一:拆分与合并–快速的批量处理内容相似的Excel

批量合并

假设你需要对某些工作内容进行问卷调查,这时你用Excel做了调查问卷模版。 我想你会这样做:先把Excel通过工作群分发给所有员工,再把群里收集到的反馈附件汇总 成一个文件。

批量拆分

假设你是公司的财务人员,你需要使用Excel对员工工资进行核算,之后再打印 出来。但是公司要求员工薪水保密,所以每个员工的工资需要拆分成一个独立的文件,最 后还需要打印出来。

  • 解决方案:使用Python实现自动化批量处理。
    • 安装扩展库:支持Excel读取的扩展库叫做xlrd库,支持Excel写入的扩展库叫做xlwt库
    • 找到整个工作过程当中重复操作的部分;
    • 将重复操作的部分需要哪些手工操作找出来,使用Python编写程序代替手工操作的部分;
    • 对重复的部分,使用循环语句进行批量处理。
    • 可以使用绘制时序图来实现手工操作到Python程序的过渡

示例代码

Merge.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import xlrd
import xlwt
from pathlib import Path, PurePath

# 导入Excel和文件操作库

# 指定要合并excel的路径
src_path = 'D:/Python自动化办公/Day01/调查问卷'
# 指定合并完成的路径
dst_file = 'D:/Python自动化办公/Day01/result/结果.xls'

# 取得给目录下所有的xlsx格式文件
p = Path(src_path)
files = [x for x in p.iterdir() if PurePath(x).match('*.xls')]
print(files)

# 准备列表存放读取结果
content = []


# 对每一个文件进行重复处理
for file in files:
# 用文件作为每个用户的标识
username = file.stem
data = xlrd.open_workbook(file)
table = data.sheets()[0]

# 取得每一项的结果
answer1 = table.cell_value(rowx=4, colx=4)
answer2 = table.cell_value(rowx=10, colx=4)
temp = f'{username},{answer1},{answer2}'

# 合并为一行存储
content.append(temp.split(','))
print("你好")
print(temp)

# 准备写入文件的表头
table_header = ['员工姓名', '第一题', '第二题']

workbook = xlwt.Workbook(encoding='utf-8')
x1sheet = workbook.add_sheet("统计结果")

# 写入表头
row = 0
col = 0
for cell_header in table_header:
x1sheet.write(row, col, cell_header)
col += 1

# 向下移动一行
row += 1
# 取出每一行的内容
for line in content:
col = 0
# 取出每个单元格内容
for cell in line:
# 写入内容
x1sheet.write(row, col, cell)
# 向右移动一个单元格
col += 1
# 向下移动一行
row += 1

# 保存最终结果
workbook.save(dst_file)

Split.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import xlrd
import xlwt
from pathlib import Path, PurePath

# 工资单文件
salary_file = 'D:/Python自动化办公/Day01/工资单/工资单.xls'
# 拆分文件保存路径
dst_path = 'D:/Python自动化办公/Day01/工资单'

data = xlrd.open_workbook(salary_file)
table = data.sheets()[0]
# 取得表头
salary_header = table.row_values(rowx=0, start_colx=0, end_colx=None)

# 定义写入文件的函数
def write_to_file(filename, cnt):
'''
filename : 写入的文件名
cnt : 写入的内容
'''
workbook = xlwt.Workbook(encoding='utf-8')
xlsheet = workbook.add_sheet("本月工资")

row = 0
for line in cnt:
col = 0
for cell in line:
xlsheet.write(row, col, cell)
col += 1
row += 1

workbook.save(PurePath(salary_file).with_name(filename).with_suffix('.xls'))



# 取得员工数量
employee_number = table.nrows
# 取得每一行,并用第二个单元格作为新的文件名
for line in range(1,employee_number):
content = table.row_values(rowx=line, start_colx=0, end_colx=None)
# 将表头和员工数量重新组成一个新的文件
new_content = []
# 增加表头到要写入的内容中
new_content.append(salary_header)
# 增加员工工资到要写入的内容中
new_content.append(content)
# 调用自定义函数write_to_file()写入新的文件
write_to_file(filename = content[1], cnt = new_content)

Python与Excel交互模块学习

谢谢你的支持哦,继续加油.