Openpyxl установить ширину столбца excel

Обновлено: 06.07.2024

Information about the display properties of a column.

Aliases can be used when either the desired attribute name is not allowed or confusing in Python (eg. “type”) or a more descriptve name is desired (eg. “underline” for “u”)

Values must be of type <class ‘bool’>

Values must be of type <class ‘bool’>

Always true if there is a width for the column

Values must be of type <class ‘str’>

Values must be of type <class ‘int’>

Values must be of type <class ‘int’>

Set boundaries for column definition

Values must be of type <class ‘float’>

class openpyxl.worksheet.dimensions. Dimension ( index, hidden, outlineLevel, collapsed, worksheet, visible=True, style=None ) [source] ¶

Information about the display properties of a row or column.

Values must be of type <class ‘bool’>

Values must be of type <class ‘bool’>

Values must be of type <class ‘int’>

Values must be of type <class ‘int’>

Aliases can be used when either the desired attribute name is not allowed or confusing in Python (eg. “type”) or a more descriptve name is desired (eg. “underline” for “u”)

Aliases can be used when either the desired attribute name is not allowed or confusing in Python (eg. “type”) or a more descriptve name is desired (eg. “underline” for “u”)

class openpyxl.worksheet.dimensions. DimensionHolder ( worksheet, reference='index', default_factory=None ) [source] ¶

Allow columns to be grouped

allow grouping a range of consecutive rows or columns together

  • start – first row or column to be grouped (mandatory)
  • end – last row or column to be grouped (optional, default to start)
  • outline_level – outline level
  • hidden – should the group be hidden on workbook open or not

Information about the display properties of a row.

Always true if there is a style for the row

Always true if there is a height for the row

Aliases can be used when either the desired attribute name is not allowed or confusing in Python (eg. “type”) or a more descriptve name is desired (eg. “underline” for “u”)

Values must be of type <class ‘float’>

Aliases can be used when either the desired attribute name is not allowed or confusing in Python (eg. “type”) or a more descriptve name is desired (eg. “underline” for “u”)

Aliases can be used when either the desired attribute name is not allowed or confusing in Python (eg. “type”) or a more descriptve name is desired (eg. “underline” for “u”)

Диаграммы состоят как минимум из одной серии из одной или нескольких точек данных. Сами серии состоят из ссылок на диапазоны ячеек. Давайте посмотрим, как построить Scatter, Bubble, Pie, 3D Pie Chart на листе Excel с использованием openpyxl.

Для построения диаграмм на листе Excel, во-первых, создайте объект диаграммы определенного класса диаграммы (например, ScatterChart, PieChart и т. Д.). После создания объектов диаграммы вставьте в него данные и, наконец, добавьте этот объект диаграммы в объект листа. Давайте посмотрим, как строить различные графики, используя данные в реальном времени.

Код № 1: нанесите пузырьковую диаграмму.

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

( "Number of Products" , "Sales in USD" , "Market share" ),

for row in rows:

xvalues = Reference(sheet, min_col = 1 ,

min_row = 2 , max_row = 5 )

yvalues = Reference(sheet, min_col = 2 ,

min_row = 2 , max_row = 5 )

size = Reference(sheet, min_col = 3 ,

min_row = 2 , max_row = 5 )

series = Series(values = yvalues, xvalues = xvalues,

zvalues = size, title = "2013" )

Выход:


Код № 2 : построение точечной диаграммы

( "Number of Products" , "Sales in USD" , "Market share" ),

for row in rows:

xvalues = Reference(sheet, min_col = 1 ,

min_row = 2 , max_row = 5 )

yvalues = Reference(sheet, min_col = 2 ,

min_row = 2 , max_row = 5 )

size = Reference(sheet, min_col = 3 ,

min_row = 2 , max_row = 5 )

series = Series(values = yvalues, xvalues = xvalues,

zvalues = size, title = "2013" )

Выход:


Код № 3 : Составьте круговую диаграмму

Круговые диаграммы представляют данные в виде срезов круга, причем каждый срез представляет собой процент от целого. Ломтики наносятся по часовой стрелке с 0 ° в верхней части круга. Круговые диаграммы могут принимать только одну серию данных.

for row in datas:

labels = Reference(sheet, min_col = 1 ,

min_row = 2 , max_row = 5 )

data = Reference(sheet, min_col = 2 ,

min_row = 1 , max_row = 5 )

chart.add_data(data, titles_from_data = True )

Выход:


Код № 4 : нанесите гистограмму

for row in datas:

labels = Reference(sheet, min_col = 1 ,

min_row = 2 , max_row = 5 )

data = Reference(sheet, min_col = 2 ,

min_row = 1 , max_row = 5 )

chart.add_data(data, titles_from_data = True )

У меня есть следующий скрипт, который преобразует файл CSV в файл XLSX, но размер моего столбца очень узок. Каждый раз мне приходится перетаскивать их мышкой, чтобы прочитать данные. Кто-нибудь знает, как установить ширину столбца в openpyxl ?

Вот код, который я использую.

Вы можете оценить (или использовать моноширинный шрифт) для достижения этой цели. Давайте предположим, что данные - это вложенный массив, например [['a1', 'a2'], ['b1', 'b2']]

Мы можем получить максимальное количество символов в каждом столбце. Затем установите ширину для этого. Ширина точно соответствует ширине моноширинного шрифта (если не меняет другие стили, по крайней мере). Даже если вы используете шрифт переменной ширины, это достойная оценка. Это не будет работать с формулами.

Немного взломать, но ваши отчеты будут более читабельными.

Это моя версия, ссылающаяся на фрагмент кода @Virako

И как использовать это следующим образом,

Еще более питонный способ установить ширину всех столбцов, который работает по крайней мере в openpyxl версии 2.4.0:

Функция as_text должна быть чем-то, что преобразует значение в строку правильной длины, как в Python 3:

После обновления с openpyxl2.5.2a до последней версии 2.6.4 (финальная версия для поддержки python 2.x) у меня возникла та же проблема при настройке ширины столбца.

По сути, я всегда вычисляю ширину столбца (dims - это дикт, поддерживающий ширину каждого столбца):

После этого я изменяю масштаб до значения, немного превышающего исходный размер, но теперь вам нужно дать значение «Буква» столбца, а не значение int (столбец ниже - это значение и переведено в правильную букву):

Это исправит видимую ошибку и назначит правильную ширину вашей колонке;) Надеюсь, что это поможет.

Вот ответ для Python 3.8 и OpenPyXL 3.0.0.

Я пытался избежать использования функции get_column_letter , но потерпел неудачу.

В этом решении используются недавно представленные выражения назначения или «оператор моржа»:

У меня проблема с merged_cells, и авторазмер не работает правильно, если у вас та же проблема, вы можете решить с помощью следующего кода:

Небольшое улучшение принятого выше ответа, который я считаю более питоническим (просить прощения лучше, чем просить разрешения)

Моя вариация ответа Буфке. Избегает небольшого ветвления с массивом и игнорирует пустые ячейки / столбцы.

Теперь исправлено для нестроковых значений ячеек.

Начиная с версии openpyxl 3.0.3 вам нужно использовать

Поскольку библиотека openpyxl вызовет ошибку TypeError, если вы передадите column_dimensions число вместо буквы столбца, все остальное может остаться прежним.

Мне пришлось изменить @ User3759685 выше ответ на этот вопрос при обновлении openpyxl. Я получил ошибку. Хорошо @phihag сообщил об этом в комментариях

Все приведенные выше ответы порождают проблему, заключающуюся в том, что col [0] .column возвращает число, в то время как worksheet.column_dimensions [column] принимает только такие символы, как 'A', 'B', 'C' вместо столбца. Я изменил код @ Virako и теперь он работает нормально.

Мы можем преобразовать числа в их значения ASCII и передать их параметру column_dimension

Новичок - у меня есть скрипт Python, который регулирует ширину разных столбцов файла Excel в соответствии с указанными значениями:

Есть ли способ, с помощью которого мы можем отрегулировать ширину каждого столбца до его наиболее оптимального значения, без явного указания его для разных столбцов (значит, без использования этого " if-elif-elif -. - elif-else "структура)? Благодарность!

4 ответа

Это, вероятно, можно сделать аккуратнее, но это делает работу. Вы можете поиграть со значением Adjust_width в соответствии с тем, что хорошо для шрифта, который вы используете при его просмотре. Если вы используете монотип, вы можете получить его точно, но это не взаимно-однозначная корреляция, поэтому вам все равно придется немного его скорректировать.

Если вы хотите получить фантазию и точность без монотипии, вы можете отсортировать буквы по ширине и присвоить каждой ширине значение с плавающей запятой, которое вы затем сложите. Это потребует третьего цикла синтаксического анализа каждого символа в значении ячейки и суммирования результата для каждого столбца и, возможно, словаря, сортирующего символы по ширине, возможно, излишнего, но крутого, если вы это сделаете.

Изменить: На самом деле, кажется, есть лучший способ измерения визуального размера текста: ссылка лично я предпочел бы метод matplotlib.

Надеюсь, что смогу помочь, мой самый первый ответ на stackoverflow =)

У меня проблема с merged_cells, и авторазмер не работает правильно, если у вас есть та же проблема, вы можете решить, добавив следующие строки в код oldsea

Обновленная версия от openpyxl 3.0.0 (использование .columns не удается с TypeError: expected <class 'str'> :

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

Я предполагаю, что вы можете использовать для записи в ascii_uppercase.

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

Читайте также: