gpt4 book ai didi

python - 如何使用 win32com 和操作系统迭代修改 Excel 文件类型?

转载 作者:行者123 更新时间:2023-12-01 07:52:45 25 4
gpt4 key购买 nike

我正在尝试迭代包含多个 xlsm(启用宏的 excel)文件的目录,打开每个文件并将其另存为 xlsx 文件。理想情况下,我会有三个目录,一个保存我的脚本,一个保存未修改的文件,另一个保存修改的文件。

目录 Macro_dir 包含:'test1.xlsm'、'test2.xlsm'、'test3.xlsm'

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

A.工作代码:

import win32com.client as win32

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

wb = excel.Workbooks.Open(r'C:\Users\Documents\macro_dir\test1.xlsm')
excel.DisplayAlerts = False
wb.DoNotPromptForConvert = True
wb.CheckCompatibility = False
wb.SaveAs(r'C:\Users\Documents\macro_dir\output1.xlsx', FileFormat=51, ConflictResolution=2)
excel.Application.Quit()

B.我尝试将其变成循环:

import os
import win32com.client as win32

dir = r'C:\Users\Documents\macro_dir'

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

for file in os.listdir(dir):
wb = excel.Workbooks.Open(file)
excel.DisplayAlerts = False
wb.DoNotPromptForConvert = True
wb.CheckCompatibility = False
wb.SaveAs(file[:-4] + 'xlsx', FileFormat=51, ConflictResolution=2)
excel.Application.Quit()

我期望代码块 B(上面)修改每个 .xlsm 文件并将它们作为 .xlsx 保存到同一目录。但是,该代码会产生以下错误:

com_error: (-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)
....

关于python - 如何使用 win32com 和操作系统迭代修改 Excel 文件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56117150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com