Существует несколько способов скопировать лист Excel (.xlsx) в другой существующий файл Excel. Поскольку мне приходится иметь дело с листами, содержащими отформатированные объекты формы (цветные текстовые поля, строки, ...), единственным рабочим решением было использование метода win32.com.client
, как упоминалось здесь . Используя этот метод, я могу вставить лист из одного существующего файла Excel в другой существующий файл Excel.
Но это имеет побочный эффект, которого я бы хотел избежать:
До добавления листа лист моего файла назначения содержит содержимое, которое помещается точно на одну страницу при печати или сохранении в формате PDF.
После добавления листа листа мой файл назначения приведет к 72 страницам при печати или сохранении в формате PDF. Первая страница содержит данные, остальные 71 страница белого цвета.
Я почти уверен, что это не проблема кода, это выглядит так:
from win32com.client import Dispatch
xl = Dispatch("Excel.Application")
wb1 = xl.Workbooks.Open(Filename=template)
wb2 = xl.Workbooks.Open(Filename=destination)
ws1 = wb1.Worksheets(1)
ws1.Copy(Before=wb2.Worksheets(1))
wb2.Close(SaveChanges=True)
xl.Quit()
Это поведение, конечно, можно впоследствии изменить, определив область печати вручную в Excel. Его также можно изменить, установив в настройках печати только страницу 1 процесса. Но это не желаемое решение этой проблемы, так как другие люди, работающие с этими файлами, как правило, не смотрят на предварительный просмотр печати и хорошо, тогда у вас есть эта куча слегка теплых чистых листов на принтере.
Я попытался установить область печати после копии листа, используя openpyxl
. Это не работает, так как сохранение результата удаляет все объекты формы из моих листов, потому что openpyxl не может их обработать. (Настройка самой области печати работала нормально, но это можно сделать только с файлами, содержащими только данные.)
Итак, я ищу:
Решение для добавления всего существующего листа .xlsx, содержащего объекты формы, в другой существующий файл Excel, без возни с распечатанным результатом или
Метод изменения области печати существующих листов .xlsx без потери объектов формы или изображений.
Я не нашел ничего полезного - но, возможно, вариант 2 может быть выполнен с использованием win32.com
тоже?
Любая идея или помощь приветствуются, спасибо!