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

时间:2019-05-13 17:24:38

标签: python excel win32com

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

目录macro_dir包含:'test1.xlsm','test2.xlsm','test3.xlsm'

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

A。工作代码:

function sumOfMultiples(number) {
    let numb = [5, 10, 12];
    let sum = 0;
    for (let x=0; x<=numb.length; x++){
        for (let i=0; i<number; i++) {
            if(i % numb === 0){
                sum += i;
            }
        }
        return sum;
    }        
}

B。我试图将其变成循环:

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(在上面)修改每个.xlsm文件,并将它们另存为.xlsx到同一目录。但是,代码会产生以下错误:

com_error:(-2147352567,“发生异常。”,(0,“ Microsoft Excel”,“对不起,我们找不到test1.xlsm。是否有可能将其移动,重命名或删除?”,'xlmain11 .chm',0,-2146827284),无)

编辑:我不能简单地更改文件扩展名,必须通过在excel中打开文件并将其另存为.xlsx来转换文件格式

1 个答案:

答案 0 :(得分:1)

是您的for循环导致错误,而不是win32com。您没有使用完整路径。

这应该解决它。

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