python 批量转换xls to xlsx,出现pywintypes.com_error: (-2147417848, ‘被调用的对象已与其客户端断开连接)’的问题处理

4 篇文章 1 订阅
2 篇文章 0 订阅

先上python批量转换xls文件转xlsx文件的源代码:

import os
import win32com.client as win32

def change_xls_to_xlsx():
        p_program_running_path = os.getcwd()

        rootdir = p_program_running_path  # 需要转换的xls文件存放处
        rootdir1 = p_program_running_path  # 转换好的xlsx文件存放处
        files = os.listdir(rootdir)  # 列出文件夹下的所有文件
        num = len(files)  # 列出所有文件的个数
        for i in range(num):  # 按文件个数执行次数
            kname = os.path.splitext(files[i])[1]  # 分离文件名与扩展名,返回(f_name, f_extension)元组
            if kname == '.xls':  # 判定扩展名是否为xls,屏蔽其它文件
                fname = rootdir + '\\' + files[i]  # 合成需要转换的路径与文件名
                fname1 = rootdir1 + '\\' + files[i]  # 合成准备存放转换好的路径与文件名
                excel = win32.gencache.EnsureDispatch('Excel.Application')  # 调用win32模块
                wb = excel.Workbooks.Open(fname)  # 打开需要转换的文件
                wb.SaveAs(fname1 + "x", FileFormat=51)  # 文件另存为xlsx扩展名的文件
                wb.Close()
                excel.Application.Quit()

        print('批量格式转换完成。')

        return None

代码本身没问题,但是运行起来的时候奇葩的事情就出现了。上面这段代码,在家里的X260、Matebook X Pro上运行毫无问题,但是在办公室的T460p上运行起来的时候,总是提示 ***“被调用的对象已与其客户端断开连接”***。。。。TMD,就是不知道问题出在哪里。

好在CSDN这里的大牛就是多,看到一位朋友在批量转换docx文件时也出现了***“被调用的对象已与其客户端断开连接”*** 的问题,原贴地址:https://blog.csdn.net/weixin_45903952/article/details/106148407。他的解决方案是删除掉了****“.Quit()”**** 语句程序即可正常运行。

回过头来,看看自己的源代码,也有一句***“excel.Application.Quit()”***,屏蔽这句代码之后,程序立刻正常运行。

wb.SaveAs(fname1 + "x", FileFormat=51)  # 文件另存为xlsx扩展名的文件
wb.Close()
#   excel.Application.Quit()

有没有哪位大神能帮忙解释一下是什么原因呢?

写在最后,如果真的要进行xls to xlsx,甚至是批量的这样操作,还是强烈建议使用xlwings库,这个库在实现这个功能方面实在是太方便了,直接用save()函数,一行代码就能搞定了。例如:

import xlwings

xlwings_app = xlwings.App(visible=False, add_book=False)
work_book = xlwings_app.books.open(‘test.xls’)
work_book.save(‘test.xlsx’)

work_book.close()
xlwings_APP.quit()

就这么简单!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值