鱼C论坛

 找回密码
 立即注册
查看: 2354|回复: 5

xls文件怎么转换xlsx

[复制链接]
发表于 2021-9-25 11:47:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 lemon_wb 于 2021-9-25 18:14 编辑

需要讲旧版的xls文件转换为xlsx文件,找到一段代码,运行有错误,不知道是怎么回事,求助~
import win32com.client as win32

fname = "C:\\Users\\test\\Desktop\\***.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()

报错信息如下:
Traceback (most recent call last):
  File "d:/Users/test/PycharmProjects/pythonProject1/333333.py", line 4, in <module>
    excel = win32.gencache.EnsureDispatch('Excel.Application')
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\gencache.py", line 531, in EnsureDispatch
    mod = EnsureModule(tla[0], tla[1], tla[3], tla[4], bForDemand=bForDemand)
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\gencache.py", line 515, in EnsureModule
    module = MakeModuleForTypelib(typelibCLSID, lcid, major, minor, progressInstance, bForDemand = bForDemand, bBuildHidden = bBuildHidden)
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\gencache.py", line 284, in MakeModuleForTypelib
    makepy.GenerateFromTypeLibSpec( (typelibCLSID, lcid, major, minor), progressInstance=progressInstance, bForDemand = bForDemand, bBuildHidden = bBuildHidden)
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\makepy.py", line 279, in GenerateFromTypeLibSpec
    gen.generate(fileUse, bForDemand)
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\genpy.py", line 829, in generate
    self.do_generate()
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\genpy.py", line 892, in do_generate
    oleItems, enumItems, recordItems, vtableItems = self.BuildOleItemsFromType()
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\genpy.py", line 757, in BuildOleItemsFromType
    oleItem, vtableItem = self._Build_Interface(type_info_tuple)
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\genpy.py", line 725, in _Build_Interface
    oleItem = DispatchItem(info, attr, doc)
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\genpy.py", line 274, in __init__
    build.DispatchItem.__init__(self, typeinfo, attr, doc)
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\build.py", line 119, in __init__
    self.Build(typeinfo, attr, bForUser)
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\build.py", line 267, in Build
    self._AddFunc_(typeinfo,fdesc,bForUser)
  File "D:\Users\test\PycharmProjects\pythonProject1\venv\lib\site-packages\win32com\client\build.py", line 156, in _AddFunc_
    assert(fdesc.desckind == pythoncom.DESCKIND_FUNCDESC)
AttributeError: 'PyFUNCDESC' object has no attribute 'desckind'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-25 18:20:49 | 显示全部楼层
报错信息不是程序本身的语句,而是excel = win32.gencache.EnsureDispatch('Excel.Application'),我在百度上搜的,这样定义对象没有问题,实在不知道是怎么回事,请教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-26 08:21:08 | 显示全部楼层
哈哈哈 直接改后缀试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-26 08:27:12 | 显示全部楼层
Python初学者8号 发表于 2021-9-26 08:21
哈哈哈 直接改后缀试试

下个06以上Ms office的版本,打开后直接另存就可以了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-26 08:38:39 | 显示全部楼层
heidern0612 发表于 2021-9-26 08:27
下个06以上Ms office的版本,打开后直接另存就可以了。

可不,也行的 ,哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-26 11:14:10 | 显示全部楼层
import win32com.client as win32

fname = "C:\\Users\\test\\Desktop\\***.xls"

excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Application.Quit()

excel = win32.gencache.EnsureDispatch('Excel.Application')
wb = excel.Workbooks.Open(fname)

wb.SaveAs(fname+"x", FileFormat = 51) 
wb.Close() 
excel.Application.Quit()

这样就行了,你应该是上一次打开,没有关闭好,导致再打开失败
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 04:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表