子涵先生最近遇到了一个任务,被领导喊去做手工搬运工。本不愿手工处理,但经过简单评估后短时间无法实现自动化,加之迫于时间压力,也只好做起了“肌肉运动”。
这部分工作大体分为3步,第一步是把xls转换为xlsx;第2步是把excel表头切换为复杂表头;第三步需要在系统上进行文件上传。
思来想去,第一步适合用python实现,第二步适合用java实现,第三步有之前子涵先生基于Python开发的鼠标点击器。趁国庆佳节,子涵先生便得空将第1-2步做了技术实现。
本节为使用python实现xls的格式转换,源码其实很简单,噔噔,开讲~
最终版下载地址:点我下载
import win32com.client as win32
fname = "E:\\source.xls"
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)
wb.SaveAs(fname+"x", FileFormat = 51) #FileFormat = 51 is for .xlsx extension
wb.Close() #FileFormat = 56 is for .xls extension
excel.Application.Quit()
那多个xls文件都需要转换格式怎么办?把需要转换的文件放置到同一个目录下不就好了吗?!好,请接着看。
import os
import win32com.client as win32
def save_as_xlsx(fname):
excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)
wb.SaveAs(fname+"x", FileFormat = 51) #FileFormat = 51 is for .xlsx extension
wb.Close() #FileFormat = 56 is for .xls extension
excel.Application.Quit()
if __name__ == "__main__":
package = "E:\\你的xls所在的文件夹\\"
files = os.listdir(package)
for fname in files:
if fname.endswith(".xls"):
print(fname + "正在进行格式转换,请稍后~")
save_as_xlsx(package + fname)
print(fname + "格式转换完成O(∩_∩)O哈哈~")
else:
print("跳过非xls文件:"+fname)
上面的代码还存在一个问题,文件夹的路径是写死的,是不是可以灵活配置或者交给用户自己选择呢?好,我们接下来继续优化。
import os
import win32com.client as win32
import easygui as eg
def save_as_xlsx(fname):
excel = win32.DispatchEx('Excel.Application')
wb = excel.Workbooks.Open(fname)
wb.SaveAs(fname + "x", FileFormat=51) # FileFormat = 51 is for .xlsx extension
wb.Close() # FileFormat = 56 is for .xls extension
excel.Application.Quit()
def pick_package():
# 打开windows窗口,选择一个文件夹
return eg.diropenbox()
if __name__ == "__main__":
package = pick_package()
files = os.listdir(package)
for fname in files:
if fname.endswith(".xls"):
print(fname + "正在进行格式转换,请稍后~")
try:
currentfile = package + "\\" + fname
save_as_xlsx(currentfile)
print(currentfile + "格式转换完成,O(∩_∩)O哈哈~")
except:
print(currentfile + "格式转换异常,┭┮﹏┭┮")
else:
print("跳过非xls文件:" + fname)
input("输入任意键退出")
有时候不要太着急,忙于应付,还是要留出思考、探索的空间,你会发现有些事还是有捷径可寻的。
python真的是个好工具,通过简简单单的代码即可实现各种复杂的操作,各种神奇的功能被封装的明明白白,虽然我对其底层不能够明明白白,也自知无暇深入。
子涵先生本身是个javaer,目前并没有契机能够深入python的学习,所以只是用来解决实际问题。
感谢您的赏读。客官,点赞、留言再走呗~或者留下您的问题一起探讨