Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用win32com和os迭代修改excel文件类型?_Python_Excel_Win32com - Fatal编程技术网

Python 如何使用win32com和os迭代修改excel文件类型?

Python 如何使用win32com和os迭代修改excel文件类型?,python,excel,win32com,Python,Excel,Win32com,我试图遍历一个包含大量xlsm(启用宏的excel)文件的目录,打开每个文件并另存为xlsx文件。理想情况下,我会有三个目录,一个保存脚本,一个保存未修改文件,另一个保存修改文件 目录macro_dir包含:“test1.xlsm”、“test2.xlsm”、“test3.xlsm” 当我循环遍历目录中的每个文件时,我无法使代码正常工作。代码块A(如下)工作:在excel.Workbooks.Open方法中,file变量是xlsm文件之一的绝对路径,wb.SaveAs方法包含具有新文件名和扩展名

我试图遍历一个包含大量xlsm(启用宏的excel)文件的目录,打开每个文件并另存为xlsx文件。理想情况下,我会有三个目录,一个保存脚本,一个保存未修改文件,另一个保存修改文件

目录macro_dir包含:“test1.xlsm”、“test2.xlsm”、“test3.xlsm”

当我循环遍历目录中的每个文件时,我无法使代码正常工作。代码块A(如下)工作:在excel.Workbooks.Open方法中,file变量是xlsm文件之一的绝对路径,wb.SaveAs方法包含具有新文件名和扩展名的绝对路径

A.工作守则:

将win32com.client作为win32导入
excel=win32.gencache.EnsureDispatch('excel.Application')
wb=excel.Workbooks.Open(r'C:\Users\Documents\macro\u dir\test1.xlsm')
excel.DisplayAlerts=False
wb.DoNotPromptForConvert=True
wb.CheckCompatibility=False
SaveAs(r'C:\Users\Documents\macro\u dir\output1.xlsx',FileFormat=51,ConflictResolution=2)
excel.Application.Quit()

B.我试图将其变成一个循环:

导入操作系统
将win32com.client作为win32导入
dir=r'C:\Users\Documents\macro\u dir'
excel=win32.gencache.EnsureDispatch('excel.Application')
对于os.listdir(dir)中的文件:
wb=excel.Workbooks.Open(文件)
excel.DisplayAlerts=False
wb.DoNotPromptForConvert=True
wb.CheckCompatibility=False
SaveAs(文件[:-4]+'xlsx',文件格式=51,冲突解决=2)
excel.Application.Quit()
我希望代码块B(上面)修改每个.xlsm文件,并将它们作为.xlsx保存到同一目录中。但是,该代码会产生以下错误:

com_错误:(-2147352567,‘发生异常’,(0,‘Microsoft Excel’,“抱歉,我们找不到test1.xlsm。是否可能它已被移动、重命名或删除?”,“xlmain11.chm”,0,-2146827284),无)


编辑:我不能简单地更改文件扩展名,必须通过在excel中打开文件并另存为.xlsx来转换文件格式,这是您的for循环导致的错误,而不是
win32com
。您没有使用完整路径

这应该可以解决它

for file in os.listdir(dir):
    file = os.path.join(dir, file)
    wb = excel.Workbooks.Open(file)
    ....

可能重复的答案似乎只是更改了文件扩展名,而不是格式。这对宏启用excel文件不起作用,因为我已经手动尝试过了。非常感谢您,为此我感到高兴。没问题。在那里,有时你只需要一双新鲜的眼睛