需求
某网站导出的excel表需要先变换格式才能整合进新表。
每次都要手动:取消单元格合并->筛选->升序排列->删除多余列。
处理前
处理后
让程序来做这些枯燥而重复的工作!
考虑到vba只能对单个excel执行,而c++库太少,python有丰富现成的库,所以选择python作为实现语言。
过程:
①读取文件路径作为变量。
②拆分带有合并的单元格。
③A6~AH14范围内,按A6升序排列。
④删除多余列。
⑤保存并退出。
面向过程,当脚本使用。
代码如下:
filename : dataProcess.py
import xlwings as xw
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
f_path = filedialog.askopenfilename()
print('\n获取的文件地址:',f_path)
app = xw.App(visible=True, add_book=False)
# app.display_alerts = False
app.screen_updating =True
wb = app.books.open(f_path)
sht1 = wb.sheets[0] # 按索引获取工作表
# #拆分单元格
sht1.range('A1:AH14').api.UnMerge()
# 排序A6~AH14范围内,按A6来排序
sht1.range('A6:AH14').api.Sort(Key1=sht1.range('A6').api, Order1=1, Orientation=1)
# 删除多余列
sht1.range('B1').api.EntireColumn.Delete()
sht1.range('C1:H1').api.EntireColumn.Delete()
sht1.range('D1:I1').api.EntireColumn.Delete()
sht1.range('E1:G1').api.EntireColumn.Delete()
sht1.range('F1:J1').api.EntireColumn.Delete()
sht1.range('G1:M1').api.EntireColumn.Delete()
sht1 = wb.sheets.active
wb.save()
wb.close()
app.quit()
input("按<Enter>键退出")
其他
因为需要移植到其他电脑上也可以使用,使用pyinstaller将dataProcess.py文件打包为exe可执行文件,让无python环境的主机也能运行。
pyinstaller .\dataProcecss.py
- -F 指定生成单一文件
- -w 生成的exe执行不显示终端
- -c 生成的exe执行显示终端
- -i 指定.ico文件,作为该exe文件的图标
此时会在当前目录下生成build和dist文件夹,还有dataProcess.spec文件。
pyinstaller不打包第三方库(xlwings),需要自己手动修改dataProcess.spec文件,来追加。
1.查找第三方xlwins包位置
pip show xlwings
2.在dataProcess.spec文件的data里面追加。
('C:\\Users\\ezhonghu\\AppData\\Local\\Programs\\Python\\Python39\\Lib\\site-packages\\xlwings','.')
windows下的路径需要把单斜杠改为双斜杠
3.追加打包
pyinstaller .\dataProcess.py