Python ширина столбца excel

Обновлено: 07.07.2024

Новичок - у меня есть скрипт 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.

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

Документ электронной таблицы Excel называется рабочей книгой. Каждая книга может хранить некоторое количество листов. Лист, просматриваемый пользователем в данный момент, называется активным. Лист состоит из из столбцов (адресуемых с помощью букв, начиная с A) и строк (адресуемых с помощью цифр, начиная с 1).

Модуль OpenPyXL не поставляется вместе с Python, поэтому его предварительно нужно установить:


Чтение файлов Excel


А теперь небольшой скрипт:

Как получить другой лист книги:

Как сделать лист книги активным:

Как задать имя листа:

Объект Cell имеет атрибут value , который содержит значение, хранящееся в ячейке. Объект Cell также имеет атрибуты row , column и coordinate , которые предоставляют информацию о расположении данной ячейки в таблице.

К отдельной ячейке можно также обращаться с помощью метода cell() объекта Worksheet , передавая ему именованные аргументы row и column . Первому столбцу или первой строке соответствует число 1, а не 0:

Размер листа можно получить с помощью атрибутов max_row и max_column объекта Worksheet :

Чтобы преобразовать буквенное обозначение столбца в цифровое, следует вызвать функцию

Чтобы преобразовать цифровое обозначение столбуа в буквенное, следует вызвать функцию

Для вызова этих функций загружать рабочую книгу не обязательно.

Используя срезы объектов Worksheet , можно получить все объекты Cell , принадлежащие определенной строке, столбцу или прямоугольной области.

Выводим значения второй колонки:

Выводим строки с первой по третью:

Для доступа к ячейкам конкретной строки или столбца также можно воспользоваться атрибутами rows и columns объекта Worksheet .

Выводим значения всех ячеек листа:

Выводим значения второй строки (индекс 1):

Выводим значения второй колонки (индекс 1):

Запись файлов Excel

Метод create_sheet() возвращает новый объект Worksheet , который по умолчанию становится последним листом книги. С помощью именованных аргументов title и index можно задать имя и индекс нового листа.

Метод remove() принимает в качестве аргумента не строку с именем листа, а объект Worksheet . Если известно только имя листа, который надо удалить, используйте wb[sheetname] . Еще один способ удалить лист — использовать инструкцию del wb[sheetname] .

Не забудьте вызвать метод save() , чтобы сохранить изменения после добавления или удаления листа рабочей книги.

Запись значений в ячейки напоминает запись значений в ключи словаря:

Заполняем таблицу 3x3:


Можно добавлять строки целиком:

Стилевое оформление

Для настройки шрифтов, используемых в ячейках, необходимо импортировать функцию Font() из модуля openpyxl.styles :

Ниже приведен пример создания новой рабочей книги, в которой для шрифта, используемого в ячейке A1 , устанавливается шрифт Arial , красный цвет, курсивное начертание и размер 24 пункта:

Именованные стили применяются, когда надо применить стилевое оформление к большому количеству ячеек.

Добавление формул

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

Эта инструкция сохранит =SUM(B1:B8) в качестве значения в ячейке B9 . Тем самым для ячейки B9 задается формула, которая суммирует значения, хранящиеся в ячейках от B1 до B8 .

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

Использование ссылок на ячейки позволяет пересчитывать результат по формулам, когда происходят изменения содержимого ячеек, включенных в формулы. Формулы Excel начинаются со знака = . Скобки () могут использоваться для определения порядка математических операции.

Примеры формул Excel: =27+36 , =А1+А2-АЗ , =SUM(А1:А5) , =MAX(АЗ:А5) , =(А1+А2)/АЗ .

Хранящуюся в ячейке формулу можно читать, как любое другое значение. Однако, если нужно получить результат расчета по формуле, а не саму формулу, то при вызове функции load_workbook() ей следует передать именованный аргумент data_only со значением True .

Настройка строк и столбцов

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

Настройка высоты строк и ширины столбцов

Объекты Worksheet имеют атрибуты row_dimensions и column_dimensions , которые управляют высотой строк и шириной столбцов.


Атрибуты row_dimension s и column_dimensions представляют собой значения, подобные словарю. Атрибут row_dimensions содержит объекты RowDimensions , а атрибут column_dimensions содержит объекты ColumnDimensions . Доступ к объектам в row_dimensions осуществляется с использованием номера строки, а доступ к объектам в column_dimensions — с использованием буквы столбца.

Для указания высоты строки разрешено использовать целые или вещественные числа в диапазоне от 0 до 409. Для указания ширины столбца можно использовать целые или вещественные числа в диапазоне от 0 до 255. Столбцы с нулевой шириной и строки с нулевой высотой невидимы для пользователя.

Объединение ячеек

Ячейки, занимающие прямоугольную область, могут быть объединены в одну ячейку с помощью метода merge_cells() рабочего листа:


Чтобы отменить слияние ячеек, надо вызвать метод unmerge_cells() :

Закрепление областей

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

У объекта Worksheet имеется атрибут freeze_panes , значением которого может служить объект Cell или строка с координатами ячеек. Все строки и столбцы, расположенные выше и левее, будут заблокированы.

Значение атрибута freeze_panes Заблокированные строки и столбцы
sheet.freeze_panes = 'A2' Строка 1
sheet.freeze_panes = 'B1' Столбец A
sheet.freeze_panes = 'C1' Столбцы A и B
sheet.freeze_panes = 'C2' Строка 1 и столбцы A и B
sheet.freeze_panes = None Закрепленные области отсутствуют

Диаграммы

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

  1. создать объект Reference на основе ячеек в пределах выделенной прямоугольной области;
  2. создать объект Series , передав функции Series() объект Reference ;
  3. создать объект Chart;
  4. дополнительно можно установить значения переменных drawing.top , drawing.left , drawing.width , drawing.height объекта Chart , определяющих положение и размеры диаграммы;
  5. добавить объект Chart в объект Worksheet .
  1. Объект Worksheet , содержащий данные диаграммы.
  2. Два целых числа, представляющих верхнюю левую ячейку выделенной прямоугольной области, в которых содержатся данные диаграммы: первое число задает строку, второе — столбец; первой строке соответствует 1, а не 0.
  3. Два целых числа, представляющих нижнюю правую ячейку выделенной прямоугольной области, в которых содержатся данные диаграммы: первое число задает строку, второе — столбец.


Аналогично можно создавать графики, точечные и круговые диаграммы, вызывая методы:

Модули xlrd и xlwt обязательных для изучения модулей Python (обработка файлов Excel)

Каталог статей

1. Введение

В работе Python excel в основном используются две библиотеки: xlrd и xlwt, то есть xlrd предназначен для чтения Excel, а xlwt - для записи библиотеки Excel.

Модуль xlrd: может читать таблицы .xls, .xlsx

Модуль xlwt: может записывать в таблицу .xls (Невозможно записать файлы .xlsx! ! !)

2. Способ установки

Модуль xlrd и модуль xlwt не являются встроенными модулями и должны быть установлены вручную.

Три, описание формы Excel

Эти два модуля очень интуитивно понятны для определения структуры таблицы Excel, и обычные привычки использования таблицы Excel в основном одинаковы.

Есть три уровня:Книга-Лист-Ячейка。

  • Книга - это файл с расширением .xls / .xlsx.
  • В книге есть несколько листов, к которым можно получить доступ по индексу или имени.
  • Рабочий лист содержит несколько строк и несколько столбцов.Основной единицей на пересечении строк и столбцов является ячейка, а содержимое записывается в ячейку. Доступ к ячейкам можно получить по индексу строки и столбца.

В питонеКнига-Лист-Ячейка, Как объект

  • WorkBook: объект Workbook
  • Лист: объект формы
  • Ячейка: объект таблицы


Четыре, xlrd читает файлы Excel

4.1 Получение объекта WorkBook

параметр: Имя файла - это путь к открываемому файлу электронной таблицы.

возвращаемое значение: Объект xlrd.book.Book

4.1 объект таблицы операций xlrd

В одном Excel может быть несколько листов, тогда вы можете получить нужную информацию о листе следующими способами.

метод Функции
workbook.sheet_names() Получите названия всех листов и сохраните их в виде списка
workbook.sheet_by_index(1) Получить объект листа по индексу
workbook.sheets() Получить все объекты листа
sheet.nrows Получить все строки указанного листа
sheet.ncols Получить количество всех столбцов на указанном листе
workbook.sheet_by_name(‘sheet’) Получить объект листа в соответствии с именем листа

Файл операции (score table.xlsx):


Пример кода:

4.2 объект ячейки операции xlrd

метод Функции
sheet.cell(row,col) Получить объект ячейки указанной строки и столбца
sheet.row_slice(row,start_col,end_col) Получить объект ячейки определенного столбца указанной строки.
sheet.col_slice(col,start_row,end_row) Получить объект ячейки из нескольких строк указанного столбца.
sheet.cell_value(row,col) Получить значение указанной строки и столбца.
sheet.row_values(row,start_col,end_col) Получение значений определенных столбцов указанной строки является расширенным использованием sheet.row_slice.
sheet.col_values(col,start_row,end_row) Получение значения нескольких строк указанного столбца - это расширенное использование sheet.col_slice.

Пример кода:

Тип данных ячейки

метод описание возвращаемое значение
xlrd.XL_CELL_TEXT(Text) Тип текста 1
xlrd.XL_CELL_NUMBER(Number) Числовой тип 2
xlrd.XL_CELL_DATE(Date) Тип даты и времени 3
xlrd.XL_CELL_BOOLEAN(Bool) Логический тип 4
xlrd.XL_CELL_EMPTY Пустой тип данных 0

Пример кода:

Пять, xlwt записывает в файл Excel

5.1 Простые рабочие шаги

Импортируйте модуль xlwt.

Создайте объект Workbook.

Создайте объект Sheet.

Запишите данные в указанную строку и столбец под Листом. Если вы хотите добавить новую ячейку к исходному объекту книги, вам нужно вызвать put_cell, чтобы добавить ее.

Сохранить как файл Excel

5.2 Справочник по общему API

Объект книги

  • кодировка: установите кодировку символов, по умолчанию - ascii, замените на utf-8, и выведите китайский язык в excel.
  • style_compression: указывает, нужно ли сжимать, обычно не используется.

Общие методы объектов Workbook

метод параметр возвращаемое значение Функции
add_sheet(sheetname,cell_overwrite_ok = False ) sheetname -Имя, используемое для этого рабочего листаcell_overwrite_ok Указывает, можно ли перезаписать ячейку, по умолчанию - False Добавить в объект рабочего листа Создайте рабочий лист в книге
save(filename_or_stream ) filename_or_stream - Это строка, содержащая имя файла, файл Excel будет сохранен (записан) на диск с указанным именем. нет Сохраните книгу как файл в локальном формате Excel

Атрибуты книги

Атрибуты Функции
Owner Установить владельца документа
country_code Код страны
wnd_protect Защита окон
backup_on_save Бэкап при сохранении
tabs_visible видна ли вкладка
dates_1904 Следует ли использовать систему дат 1904 года
use_cell_values Значение ячейки
default_style Стиль по умолчанию
colour_RGB цвет
vscroll_visible Видна ли вертикальная полоса прокрутки
hscroll_visible Видна ли горизонтальная полоса прокрутки
wnd_mini Свернуть окно
wnd_visible Видно ли окно
tab_width ширина табуляции
active_sheet Лист деятельности
Height высота
Width ширина
Hpos Абсцисса
Vpos Ось Y
Protect защита
obj_protect Защита объекта

Простой пример:

5.3 Пример кода

5.4 Установка стилей для Excel

1. Создайте таблицу и получите объект рабочего листа.

2. Установите ширину столбца, cols_num - количество столбцов.

3. Установите высоту строки.

4. Установите стиль ячейки Excel.

5. Записываем данные в ячейку.


6. Дополнение

При установке цвета шрифта или цвета фона ячейки вы можете использовать параметр 0x0D в исходном коде для представления разных цветов или вы можете использовать 0-127 для представления разных цветов.

У меня есть следующий скрипт, который преобразует файл 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

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