2015-05-14 5 views
1

Я пытаюсь настроить рабочий лист для автоматической установки всех столбцов на одной странице с помощью openpyxl. Способ, которым я подошел, - установить свойство fitToWidth и свойство fitToHeight. До сих пор я могу изменить настройку страницы, чтобы иметь значение fitToWidth 1 и значение fitToHeight 0, но когда я открываю электронную таблицу, она все еще находится в разделе «Отрегулировать», а не в выборе «Fit to», где fitToWidth и Использовались значения fitToHeight. Как я могу изменить этот выбор в настройке страницы как «Подгонка к» вместо «Настроить на»?openpyxl Page Setup «Fit To» vs «Adjust To»

Я думаю, что свойство PageSetup.zoom, которое должно быть False, но я не могу понять, как это сделать с помощью openpyxl. Вот статья MSDN на нем: https://msdn.microsoft.com/en-us/library/office/ff197028.aspx

Вот мой код до сих пор:

from openpyxl import load_workbook 
wb = load_workbook('test.xlsx') 
ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE 
ws.page_setup.fitToWidth = 1 
ws.page_setup.fitToHeight = 0 
ws.sheet_view.view = "pageLayout" 

Спасибо!

ответ

0

openpyxl реализует спецификацию файла, которая может отличаться от того, что предлагает какой-либо конкретный SDK. Это относится к scale. См. § 18.3.1.64 спецификации ECMA 476. Например. ws.page_setup.scale = 400 должен работать.

Следует отметить, что различные варианты отображения и печати распространяются несколько интуитивно внутри файла.

+0

Charlie, я сам столкнулся с этой проблемой, но я не совсем уверен, как ваш ответ применяется. Не могли бы вы прояснить это для меня? Установив масштаб, я могу увеличить масштаб до определенного масштаба, но это все еще не устанавливает листок в Fit To. Итак, что делает свойство fitToWidth на самом деле? – Tom

+0

@tom OP ожидает функцию из MS SDK, которая не отражается в спецификации OOXML. openpyxl - это библиотека для формата файла, а не версия Pythonic для Excel. –

+0

Спасибо, Чарли. Я интерпретировал вопрос OP более практичным, а не обязательно о пользовательском интерфейсе Excel для xml-файлов. – Tom

5

следующие работы для меня:

import openpyxl, os 

f = r'test.xlsx' 
wb = openpyxl.load_workbook(f) 
ws = wb.active 

ws.sheet_properties.pageSetUpPr.fitToPage = True 
ws.page_setup.fitToHeight = False 

wb.save(f) 

Конечно, если вы хотите, чтобы подогнать высоту на одну страницу и не заботиться о количестве страниц широких, вы бы заменить

ws.page_setup.fitToHeight = False 

с

ws.page_setup.fitToWidth = False 

Если вы хотите, чтобы весь лист на одной странице, то падение «ws.page_set вверх ... ».

Если вы хотите, высота/ширина, чтобы поместиться на, например, 3 страницы, используйте:

ws.page_setup.fitToWidth = 3 

Но, ключевой элемент, который я боролся с, что вы должны установить ws.sheet_properties.pageSetUpPr .fitToPage = True до установки свойств fitToHeight и/или fitToWidth.

Вам не нужно явно указывать процентный вес шкалы. Это отменит настройки здесь.

+1

В openpyxl версии 2.3+ вы можете использовать 'ws.page_setup.fitToPage = True' вместо' ws.sheet_properties.pageSetUpPr.fitToPage = True' – veroxii