У меня есть исходный файл Excel в исходной папке (*.xlsm
) и другой файл (также *.xlsm
), который содержит некоторые данные. Я должен создать третий файл, который должен быть *.xls
, который в основном является исходным файлом Excel, который содержит некоторые данные второго файла. Для этого я написал этот код:
from openpyxl import load_workbook
file1 = "C:\\Users\Desktop\file1.xlsm"
file2 = "C:\\Users\Desktop\file2.xlsm"
file3 = "C:\\Users\Desktop\file3.xls"
wb1 = load_workbook(file1)
sheet1 = wb1["Sheet1"]
wb2 = load_workbook(file2)
sheet2 = wb2["Sheet1"]
sheet1["A1"].value = sheet2["A1"].value
wb1.save(file3)
Код, кажется, в порядке и не возвращает никаких ошибок, но я не могу открыть созданный file3
.
Я не понимаю, почему, я пытался изменить расширение третьего файла, но и *.xlsx
и *.xlsm
показывают эту проблему. Я также пытался удалить часть строки
sheet1["A1"].value = sheet2["A1"].value
чтобы понять, была ли проблема связана с написанием листа, но проблема остается.
Надеюсь, я достаточно ясно объяснил проблему и что кто-то может мне помочь.
Заранее спасибо.
Прежде всего, пожалуйста, обратите внимание, что ваш код не создает новый файл, а просто восстанавливает существующий.
Также не ясно, что вы хотите: вы хотите создать file3
? С какой информацией? Ваш код ничего этого не делает.
Однако я попытался запустить короткую версию вашего кода, и я получил ошибку:
openpyxl.utils.exceptions.InvalidFileException: openpyxl не поддерживает формат файла .xlsm ', убедитесь, что сначала вы можете открыть его в Excel. Поддерживаемые форматы:.xlsx,.xlsm,.xltx,.xltm
Скорее всего, ваш формат файла не поддерживается. Попробуйте сохранить ваши файлы в формате xlsx
. Я думаю, что проблема в макросах: если у вас их нет в файлах, то изменение формата не должно быть проблемой. Если у вас есть, я не уверен, что openpyxl будет работать таким образом (по крайней мере, без обходного пути).
Этот ответ может помочь. Он предлагает извлечь файлы xlms
(это zip файлы), поработать над теми, которые представляют формат вашего листа (не макрос), а затем снова собрать все воедино.