Форум сайта python.su
Доброго времени суток!
Перешел на редактирование 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") # Вывод печати на принтер
Офлайн
Добрый вечер!
Еле нарыл инфу, что модуль xlrd не умеет читать такую инфу с файла, а xlwt записывать.
Думаю моя проблема состоит в формате таблицы.
Через модуль xls2xlsx сконвертировал свой результат в xlsx
Но, так как модуль xls2xlsx работает на основе модулей xlrd и xlwt, в итоговом файле так же сбрасываются настройки области печати
(в первоначальном, нетронутом файле всё это было страницей 1)
Но прогресс есть!
Теперь у меня есть xlsx файл, с которым уже работает большинство модулей по чтению/записью excel
Посоветуйте простенький модуль для изменении области печати в xlsx файле
Офлайн
https://xlsxwriter.readthedocs.io/page_setup.html
print_area(first_row, first_col, last_row, last_col)оно?
Set the print area in the current worksheet.
[code python][/code]
Офлайн
PEHDOMЯ так обрадовался когда увидел эти строки!
оно?
Офлайн
хмм, а это https://openpyxl.readthedocs.io/en/stable/print_settings.html?highlight=print_area#add-a-print-area
openpyxl вроде читает и пишет
[code python][/code]
Офлайн
PEHDOMСпасибо большое за помощь,
Офлайн
хмм тут не скажу все парметры лоад_воркбук можно посмотреть тут https://openpyxl.readthedocs.io/en/stable/api/openpyxl.reader.excel.html
по поводу стилей ячеек https://openpyxl.readthedocs.io/en/stable/styles.html может чтото найдете судя по картинке оно не коректно работает с обьединенными ячейками. попробуйте посмотреть какие там стили оно загружает для этих ячеек. И как это можо исправить.
И по поводу синих лниний, скорее всего нужо смотреть или настройки принтера/стриницы https://openpyxl.readthedocs.io/en/stable/api/openpyxl.worksheet.page.html
или попробовать задать не одну область, а список областей
Спойлер из документации:https://openpyxl.readthedocs.io/en/stable/api/openpyxl.worksheet.worksheet.html
print_area
The print area for the worksheet, or None if not set. To set, supply a range like ‘A1:D4’ or a list of ranges.
[code python][/code]
Отредактировано PEHDOM (Март 7, 2021 10:11:32)
Офлайн
PEHDOMДоброе утро!
Офлайн
УРА!!! Поздравьте меня!
Наконец, нашел модуль который подходит для моих задач!
1. Открывает редактирует и сохраняет xls excel
2. Не поганит файл.
3. Мне даже кажется что он работает быстрее тех модулей, что были выше по переписке
https://habr.com/ru/post/232291/
Офлайн
TempИз вашего поста непонятно что именно вы нашли. Методом исключения win32com?
Наконец, нашел модуль который подходит для моих задач!
TempЧестно говоря с самого начала дискуссии мне была непонятна ваша привязанность к давно устаревшему формату xls, который даже микрософт рекомендует выкинуть. Мне интересно с чем это связано?
1. Открывает редактирует и сохраняет xls excel
TempЕсли вы о win32com то должен вас огорчить. Вызовы win32com очень дорогие. На обычных задчах он в сотни раз медленнее перечисленных выше модулей. Настолько медленный что мне даже пришлось отказаться от него для решения прикладных задачек, поскольку приходилось ждать десятки минут, в то время прямое редактирование справлялось за секунды. (речь правда идет о ворде).
3. Мне даже кажется что он работает быстрее тех модулей, что были выше по переписке
Отредактировано doza_and (Март 8, 2021 11:21:08)
Офлайн