Я пытаюсь перебрать каталог, содержащий несколько файлов 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