使用python把批量xls文件转换为xlsx

子涵先生最近遇到了一个任务,被领导喊去做手工搬运工。本不愿手工处理,但经过简单评估后短时间无法实现自动化,加之迫于时间压力,也只好做起了“肌肉运动”。
这部分工作大体分为3步,第一步是把xls转换为xlsx;第2步是把excel表头切换为复杂表头;第三步需要在系统上进行文件上传。
思来想去,第一步适合用python实现,第二步适合用java实现,第三步有之前子涵先生基于Python开发的鼠标点击器。趁国庆佳节,子涵先生便得空将第1-2步做了技术实现。
本节为使用python实现xls的格式转换,源码其实很简单,噔噔,开讲~

最终版下载地址:点我下载

第一版 单个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文件都需要转换格式怎么办?把需要转换的文件放置到同一个目录下不就好了吗?!好,请接着看。

第二版 目录下多个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的学习,所以只是用来解决实际问题。

在这里插入图片描述

感谢您的赏读。客官,点赞、留言再走呗~或者留下您的问题一起探讨

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/l714417743/article/details/108937392