Найти - Пользователи
Полная версия: Изменение области печати Excel через Python
Начало » Python для новичков » Изменение области печати Excel через Python
1 2
Temp
Доброго времени суток!

Перешел на редактирование 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") # Вывод печати на принтер
Надеюсь, тут найдется человек, страдавший подобной хе*нёй что и я.
Буду очень признателен.
Temp
Добрый вечер!

Еле нарыл инфу, что модуль xlrd не умеет читать такую инфу с файла, а xlwt записывать.

Думаю моя проблема состоит в формате таблицы.
Через модуль xls2xlsx сконвертировал свой результат в xlsx
Но, так как модуль xls2xlsx работает на основе модулей xlrd и xlwt, в итоговом файле так же сбрасываются настройки области печати


(в первоначальном, нетронутом файле всё это было страницей 1)

Но прогресс есть!
Теперь у меня есть xlsx файл, с которым уже работает большинство модулей по чтению/записью excel

Посоветуйте простенький модуль для изменении области печати в xlsx файле
PEHDOM
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.
оно?
Temp
PEHDOM
оно?
Я так обрадовался когда увидел эти строки!

Но как оказалось, это функция модуля xlsxwriter, которая не читает файлы, а только пишет.
Теперь я в глубокой депрессии.
PEHDOM
хмм, а это https://openpyxl.readthedocs.io/en/stable/print_settings.html?highlight=print_area#add-a-print-area
openpyxl вроде читает и пишет
Temp
PEHDOM
Спасибо большое за помощь,

Как оказалось, print_area меняет общий размер печатной области, на моём скрине выше, это жирный синий квадрат. Как же изменить пунктирную синюю линию разделяющую первую страницу от второй?

Openpyxl - при открытии и последующем сохранении через этот модуль содержимое файла так сказать немного “шакалится” особенно это заметно при отрисовки линий таблицы при объединённых ячейках.
Может в функции load_workbook имеется какой-нибудь параметр исправляющий это? Как в xlrd : formatting_info=True

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.
Тогда возможно оно будет считать каждую область отдельной страницей.
Temp
PEHDOM
Доброе утро!
У меня возникла прекрасная идея, так как я собираюсь лишь слегка подредактировать xls файл,
могу ли я в питоне записать код на VBA (его я знаю) и заставить определенный файл excel исполнить его?
Temp
УРА!!! Поздравьте меня!

Наконец, нашел модуль который подходит для моих задач!
1. Открывает редактирует и сохраняет xls excel
2. Не поганит файл.
3. Мне даже кажется что он работает быстрее тех модулей, что были выше по переписке

https://habr.com/ru/post/232291/
doza_and
Temp
Наконец, нашел модуль который подходит для моих задач!
Из вашего поста непонятно что именно вы нашли. Методом исключения win32com?
Temp
1. Открывает редактирует и сохраняет xls excel
Честно говоря с самого начала дискуссии мне была непонятна ваша привязанность к давно устаревшему формату xls, который даже микрософт рекомендует выкинуть. Мне интересно с чем это связано?
Temp
3. Мне даже кажется что он работает быстрее тех модулей, что были выше по переписке
Если вы о win32com то должен вас огорчить. Вызовы win32com очень дорогие. На обычных задчах он в сотни раз медленнее перечисленных выше модулей. Настолько медленный что мне даже пришлось отказаться от него для решения прикладных задачек, поскольку приходилось ждать десятки минут, в то время прямое редактирование справлялось за секунды. (речь правда идет о ворде).

В питоне есть средство измерения времени выполнения https://docs.python.org/3/library/timeit.html. Оно позволит измерить результат а не опираться на ощущения или веру.

Ну у всего есть плюсы и минусы… Если удобно то почему его не использовать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB