在图3-5中,每1份销售发票文件均由每位员工各自整理而成,其中1张工作表仅对应1张发票,而1份文件中可能会包含多张工作表,如图3-6所示。
从这些销售发票文件中,读取图3-4所示范围内的数据,生成CSV格式的清单文件salesList.csv,如图3-7所示。
一起来详细分析程序的代码吧。因为这里会对程序代码进行反复阅读比较,所以在拥有可以使用计算机的条件时,用Visual Studio Code阅读示例程序会更加方便。下载示例文件,并找到“第3章”下的python_prg文件夹,使用Visual Studio Code打开该文件夹,即可阅读程序sales_slip2csv.py。
程序各行代码的具体含义,将会在本章后半部分进行讲解,现在仅需关注代码中的要点,理清程序使用什么方法进行了怎样的操作,把握住整体的处理流程就可以了。
代码3-1 sales_slip2csv.py
1 import pathlib # 标准库
2 import openpyxl # 外部库
3 import csv # 标准库
4 5
6 lwb = openpyxl.Workbook # 生成销售清单的工作簿lwb
7 lsh = lwb.active # 获得默认生成的工作表
8 list_row = 1
9 path = pathlib.Path("..\data\sales") #指定相对路径
10 for pass_obj in path.iterdir:
11 if pass_obj.match("*.xlsx"):
12 wb = openpyxl.load_workbook (pass_obj)
13 for sh in wb:
14 for dt_row in range(9,19):
15 if sh.cell(dt_row, 2).value! =None:
16 lsh.cell(list_row, 1).value =sh.cell(2, 7).value
17 lsh.cell(list_row, 2).value =sh.cell(3, 7).value
18 lsh.cell(list_row, 3).value =sh.cell(4, 3).value
19 lsh.cell(list_row, 4).value =sh.cell(7, 8).value
20 lsh.cell(list_row, 5).value =sh.cell(dt_row, 1).value
21 lsh.cell(list_row, 6).value =sh.cell(dt_row, 2).value
22 lsh.cell(list_row, 7).value =sh.cell(dt_row, 3).value
23 lsh.cell(list_row, 8).value =sh.cell(dt_row, 4).value
24 lsh.cell(list_row, 9).value =sh.cell(dt_row, 5).value
25 lsh.cell(list_row, 10).value =sh.cell(dt_row, 4).value * \
26 sh.cell(dt_row, 5).value
27 lsh.cell(list_row, 11).value= sh.cell(dt_row, 7).value
28 list_row = 1
29
30with open("..\data\sales\salesList.
csv","w",encoding="utf_8_sig") as fp:
31 writer = csv.writer(fp,linetermi nator="\n")
32 for row in lsh.rows:
33 writer.writerow([col.value for col in row]) #列表推导式
代码3-1的第一行的import pathlib语句,导入了标准库pathlib。使用pathlib可以更方便地在程序中进行文件及文件夹路径的相关操作②。
当编写的程序会进行文件操作时,请务必尝试使用该库。
路径是指示电脑中特定资源所在位置的字符串。该字符串在程序中,用于展示存储(硬盘或SSD)中文件或文件夹(目录)的位置。
第2行加载的openpyxl是用于处理Excel文件的库。因为openpyxl是外部第三方库,所以在使用之前需要事先进行安装③。另外,最终需要输出csv文件,因此在第3行加载了csv的标准库。
哦对啦,关于Python和Excel学习的秘籍就是《Excel×Python智能高效办公》,快来参与抽奖获得书籍吧~