![编程改变生活:用Python提升你的能力(进阶篇·微课视频版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/968/52841968/b_52841968.jpg)
1.5 典型应用
本节讲述使用Python批量处理Excel文档的典型应用,包括批量替换Excel工作簿中的数据、将多个工作表合并为一个工作表、批量拆分列数据。
1.5.1 批量替换Excel工作簿中的单元格数据
【实例1-23】 在D盘test文件夹下的demo3文件夹下有5个Excel文档,这5个工作簿中都存储了“电冰箱”的数据,如图1-45和图1-46所示。
![](https://epubservercos.yuewen.com/D90D69/31397697307936406/epubprivate/OEBPS/Images/Figure-P48_4700.jpg?sign=1739632872-S5xqyRsUSG0DbEt8oiGQj6YiQUxEwk8E-0-438553661f9adf007cc972cc1eb859ff)
图1-45 文件夹demo3下的Excel文档
![](https://epubservercos.yuewen.com/D90D69/31397697307936406/epubprivate/OEBPS/Images/Figure-P48_4703.jpg?sign=1739632872-6VaPlHLQTnWZKHkuraouedNHwJROpFhW-0-50a0c4b3eff93377b780abccd1d71631)
图1-46 4月销售数据.xlsx文件中的工作表
将该文件夹下Excel工作簿中的“电冰箱”替换为“三门电冰箱”,并保存数据,代码如下:
#===第1章代码1-23.py===# import xlwings as xw from pathlib import Path src_folder=Path('D:\\test\\demo3\\') file_list=list(src_folder.glob('*.xlsx')) app=xw.App(visible=False,add_book=False) for file in file_list: if file.name.startswith('~$'): continue#Excel在打开一个工作簿的同时会生成一个以'~$'为开头的临时文件,要 #跳过此类文件 book=app.books.open(file) for sheet in book.sheets: data=sheet['a2'].expand('table').value for index,val in enumerate(data): print(val) if val[2]=='电冰箱': val[2]='三门电冰箱' data[index]=val sheet['a2'].expand('table').value=data book.save() book.close() app.quit()
运行结果如图1-47和图1-48所示。
![](https://epubservercos.yuewen.com/D90D69/31397697307936406/epubprivate/OEBPS/Images/Figure-P49_4716.jpg?sign=1739632872-0pyP7rhpkJRXScPxnMffHHo9IDncCJt1-0-bf17e96771d335719bf625cadddd0966)
图1-47 代码1-23.py的运行结果
![](https://epubservercos.yuewen.com/D90D69/31397697307936406/epubprivate/OEBPS/Images/Figure-P49_4719.jpg?sign=1739632872-ijh05oBWyfpjQqABTbal6w3sNRx2XhsM-0-35d701ba074562884e8c1c67f0a664e3)
图1-48 替换关键词后的Excel工作簿
1.5.2 将多个工作表合并为一个工作表
【实例1-24】 在D盘test文件夹下的demo4文件夹下有4个Excel文档,这4个工作簿中都含有名字是Sheet1的工作表,如图1-49和图1-50所示。
![](https://epubservercos.yuewen.com/D90D69/31397697307936406/epubprivate/OEBPS/Images/Figure-P50_4726.jpg?sign=1739632872-wWSQeFTipI5UGSa7rZ7xtj1MXBeojFCK-0-a49547a005863d97c6e1d6df63c0337e)
图1-49 文件夹demo4下的Excel文档
![](https://epubservercos.yuewen.com/D90D69/31397697307936406/epubprivate/OEBPS/Images/Figure-P50_4730.jpg?sign=1739632872-jIzUKeB1lAHzjfiwmcGjmFcePp6sIy6P-0-2f1aa4f32035866119074c42ff8b2958)
图1-50 Excel文档中的工作表Sheet1
将该文件夹下Excel文档中的名字是Sheet1的工作表合并为一个工作表,并保存在该目录下,代码如下:
#===第1章代码1-24.py===# import xlwings as xw from pathlib import Path src_folder=Path('D:\\test\\demo4\\') file_list=list(src_folder.glob('*.xlsx')) app=xw.App(visible=False,add_book=False) #数据的读取和合并 header=None all_data=[] for file in file_list: if file.name.startswith('~$'): continue book=app.books.open(file) for sheet in book.sheets: if sheet.name=='Sheet1': if header==None: header=sheet['a1:f1'].value data=sheet['a2'].expand('table').value all_data=all_data+data book.close() #创建一个新的工作簿来存储数据 new_book=xw.Book() new_sheet=new_book.sheets.add('四个月的销售数据') new_sheet['a1'].value=header new_sheet['a2'].value=all_data new_sheet.autofit() new_book.save('D:\\test\\demo4\\合并的销售数据.xlsx') new_book.close() app.quit()
运行结果如图1-51和图1-52所示。
![](https://epubservercos.yuewen.com/D90D69/31397697307936406/epubprivate/OEBPS/Images/Figure-P51_4750.jpg?sign=1739632872-DOdNYMlNP3cLoaRxAwdmhdWuZHWYqZm7-0-820cf0a579f44be25a89743bb4bebf34)
图1-51 代码1-24.py创建的Excel文档
![](https://epubservercos.yuewen.com/D90D69/31397697307936406/epubprivate/OEBPS/Images/Figure-P51_4753.jpg?sign=1739632872-XWVnYdcBOmreAVtgI2RMaS5wDPkcR57c-0-f46f71872599e059aa131386b48cbc78)
图1-52 代码1-24.py合并的工作表
1.5.3 批量拆分列数据
【实例1-25】 在D盘test文件夹下的demo5文件夹下有5个Excel文档,这5个工作簿中都含有名字是Sheet1的工作表,如图1-53和图1-54所示。
![](https://epubservercos.yuewen.com/D90D69/31397697307936406/epubprivate/OEBPS/Images/Figure-P51_4758.jpg?sign=1739632872-xdvpTSIJDtuxMlNViOTatxRG9rlIYhsx-0-2e29ab400f9a81b7e906d99271750c1d)
图1-53 文件夹demo5下的Excel文档
![](https://epubservercos.yuewen.com/D90D69/31397697307936406/epubprivate/OEBPS/Images/Figure-P51_4761.jpg?sign=1739632872-wGoZaHAYm8lhA9qx3DSj4Byh1E8HzYW0-0-27b0fbc120e2a727ce2c6ed28c082e24)
图1-54 Excel文档中的工作表Sheet1
将该文件夹下Excel文档中工作表的“产品尺寸(mm)”列批量分拆成三列(长、宽、高),并保存数据,代码如下:
#===第1章代码1-25.py===# import xlwings as xw import pandas as pd from pathlib import Path src_folder=Path('D:\\test\\demo5\\') file_list=list(src_folder.glob('*.xlsx')) app=xw.App(visible=False,add_book=False) for file in file_list: if file.name.startswith('~$'): continue book=app.books.open(file) sheet=book.sheets['Sheet1'] data=sheet.range('a1').options(pd.DataFrame,header=1,index=False, expand='table').value new_data=data['产品尺寸(mm)'].str.split('*',expand=True) new_data.columns=['长(mm)','宽(mm)','高(mm)'] for n in range(new_data.shape[1]-1): sheet['E:E'].insert(shift='right', copy_origin='format_from_left_or_above') sheet['E1'].options(index=False).value=new_data sheet.autofit() book.save() app.quit
运行结果如图1-55所示。
![](https://epubservercos.yuewen.com/D90D69/31397697307936406/epubprivate/OEBPS/Images/Figure-P52_4781.jpg?sign=1739632872-RvJQD7ZqrmWfWUgzyTXvP0F9EDZx8Rp6-0-16a9b30c9b64c3a7cdf255659b06c1f8)
图1-55 分拆后的工作表Sheet1