Перешел на редактирование Excel файлов, но есть одна проблема, область печати документа при редактировании таким образом сбивается. Если нет возможности “Содрать” данные настроек печати со старого файла. Можно реализовать это вручную, количество строк и колон фиксированное.
Использую модули xlrd, xlwt и xlutils - так как они поддерживают xls (НЕ xlsx)
Единственное упоминание об этой проблеме, что я нашел в интернете:
Вы читаете в файле с помощью xlrd, а затем копируете его в рабочую книгу xlwt с помощью xlutils.copy.copy().
Обратите внимание, что вам нужно будет установить библиотеки xlrd и xlutils.
Отметим также, что не все копируется. Например, изображения и настройки печати не копируются, и их необходимо сбросить.
мой код:
from xlrd import open_workbook from xlutils.copy import copy import os # Эти две функции просто устанавливают предыдущий стиль ячейки, скоммуниздил их где-то в интернете def setOutCell(outSheet, col, row, value): previousCell = _getOutCell(outSheet, col, row) outSheet.write(row, col, value) if previousCell: newCell = _getOutCell(outSheet, col, row) if newCell: newCell.xf_idx = previousCell.xf_idx def _getOutCell(outSheet, colIndex, rowIndex): row = outSheet._Worksheet__rows.get(rowIndex) if not row: return None cell = row._Row__cells.get(colIndex) return cell book = open_workbook("Мой загружаемый файл.xls", formatting_info=True) sheet = book.sheet_by_index(0) items = sheet.nrows - 37 wb = copy(book) #тут 'перехожу в режим' редактирования, оно и не копирует область печати s = wb.get_sheet(0) setOutCell(s, 17, 26 + items, 'Тут что-то меняю') setOutCell(s, 17, 30 + items, 'И тут') setOutCell(s, 11, 34 + items, 'И тут') setOutCell(s, 31, 26 + items, 'И тут тоже') setOutCell(s, 29, 28 + items, 'Само собой тут тоже') wb.save("Test.xls") #Создание и сохранение нового файла os.startfile("Test.xls", "print") # Вывод печати на принтер
Буду очень признателен.