Пакет для создания xlsx файлов на python. xlswxriter

Теги: templating 

XlsxWriter — это модуль Python, который можно использовать для записи текста, чисел, формул и гиперссылок на несколько листов в файле Excel 2007+ XLSX. Он поддерживает такие функции, как форматирование и многие другие, в том числе:

  • 100% совместимые файлы Excel XLSX.
  • Полное форматирование.
  • Объединенные ячеек.
  • Имена.
  • Графики.
  • Автофильтры.
  • Проверка данных и выпадающие списки.
  • Условное форматирование.
  • Изображения PNG/JPEG/GIF/BMP/WMF/EMF.
  • Мультиформатные строки.
  • Комментарии к ячейкам.
  • Текстовые поля.
  • Интеграция с Pandas и Polars.
  • Режим оптимизации памяти для записи больших файлов.

pip install XlsxWriter

Работа с пакетом

Создание документа.

import xlsxwriter

# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
worksheet = workbook.add_worksheet()

# Some data we want to write to the worksheet.
expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

# Start from the first cell. Rows and columns are zero indexed.
row = 0
col = 0

# Iterate over the data and write it out row by row.
for item, cost in (expenses):
    worksheet.write(row, col, item)
    worksheet.write(row, col + 1, cost)
    row += 1

# Write a total using a formula.
worksheet.write(row, 0, 'Total')
worksheet.write(row, 1, '=SUM(B1:B4)')

workbook.close()

Форматирование документа. Объекты формата представляют все свойства форматирования, которые можно применить к ячейке в Excel, такие как шрифты, форматирование чисел, цвета и границы, передава в качестве аргумента в worksheet.write()

import xlsxwriter

# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('Expenses02.xlsx')
worksheet = workbook.add_worksheet()

# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})

# Add a number format for cells with money.
money = workbook.add_format({'num_format': '$#,##0'})

# Write some data headers.
worksheet.write('A1', 'Item', bold)
worksheet.write('B1', 'Cost', bold)

# Some data we want to write to the worksheet.
expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

# Start from the first cell below the headers.
row = 1
col = 0

# Iterate over the data and write it out row by row.
for item, cost in (expenses):
    worksheet.write(row, col, item)
    worksheet.write(row, col + 1, cost, money)
    row += 1

# Write a total using a formula.
worksheet.write(row, 0, 'Total', bold)
worksheet.write(row, 1, '=SUM(B2:B5)', money)

workbook.close()

Запись разных типов данных

from datetime import datetime
import xlsxwriter

# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('Expenses03.xlsx')
worksheet = workbook.add_worksheet()

# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': 1})

# Add a number format for cells with money.
money_format = workbook.add_format({'num_format': '$#,##0'})

# Add an Excel date format.
date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})

# Adjust the column width.
worksheet.set_column(1, 1, 15)

# Write some data headers.
worksheet.write('A1', 'Item', bold)
worksheet.write('B1', 'Date', bold)
worksheet.write('C1', 'Cost', bold)

# Some data we want to write to the worksheet.
expenses = (
    ['Rent', '2013-01-13', 1000],
    ['Gas',  '2013-01-14',  100],
    ['Food', '2013-01-16',  300],
    ['Gym',  '2013-01-20',   50],
)

# Start from the first cell below the headers.
row = 1
col = 0

for item, date_str, cost in (expenses):
    # Convert the date string into a datetime object.
    date = datetime.strptime(date_str, "%Y-%m-%d")

    worksheet.write_string(row, col, item)
    worksheet.write_datetime(row, col + 1, date, date_format)
    worksheet.write_number(row, col + 2, cost, money_format)
    row += 1

# Write a total using a formula.
worksheet.write(row, 0, 'Total', bold)
worksheet.write(row, 2, '=SUM(C2:C5)', money_format)

workbook.close()

Workbook

Класс реализует конструктор новго excel документа. Он предоставляет апи управления используемой памятью и реализует протокол контекстного менеджера.

from io import BytesIO
import xlsxwriter

output = BytesIO()

with xlsxwriter.Workbook('hello_world.xlsx') as workbook:
    worksheet = workbook.add_worksheet(output)
    worksheet.write('A1', 'Hello world')

xlsx_data = output.getvalue()
  • workbook.add_worksheet() реализует добавление страницы в документ
  • workbook.add_format() реализует добавление свойств из Format или позже
  • workbook.add_chart() создает объект диаграмы
  • workbook.add_chartsheet() добавляет лист диаграмы
  • workbook.close()
  • workbook.set_size() размер окна рабочей области книги
  • workbook.tab_ratio() добавляет полосы прокрутки
  • workbook.set_properties() добавляет стандартные свойства, такие как тайтл, автор и т.п.
  • workbook.set_custom_property()
  • workbook.define_name() добавляет имя, которое можно использовать как переменную в xlsx
  • workbook.add_vba_project()
  • workbook.set_vba_name()
  • workbook.worksheets() список вккладок
  • workbook.get_default_url_format()
  • workbook.set_calc_mode()
  • workbook.use_zip64()
  • workbook.read_only_recommended()

The Format Class

cell_format1 = workbook.add_format()  # Set properties later.
cell_format2 = workbook.add_format(props)  # Set properties at creation.
cell_format = workbook.add_format()
cell_format.set_bold()
cell_format.set_font_color('red')
cell_format = workbook.add_format({'bold': True, 'font_color': 'red'})

После создания объекта Format и установки его свойств его можно передать в качестве аргумента методам write(), set_row(), set_column() рабочего листа

worksheet.write(0, 0, 'Foo', cell_format)
worksheet.write_string(1, 0, 'Bar', cell_format)
worksheet.write_number(2, 0, 3, cell_format)
worksheet.write_blank (3, 0, '', cell_format)

worksheet.set_row(0, 18, cell_format)
worksheet.set_column('A:D', 20, cell_format)

В отсутствии утсановленного офрмата используется дефолтный Excel 2007+ cell format Calibri 11. При желании уже установленное форматирование можно переопределить позже в коде. Поддерживаются различные числовые форматы. Смотри подробнее про методы форматирования и свойства Format

Worksheet class

Основной метод worksheet.write() Для записи разных типов доступно несколько дополнительных методов:

  • write_string()
  • write_number()
  • write_blank()
  • write_formula()
  • write_datetime()
  • write_boolean()
  • write_url()
  • write_rich_string()

worksheet.add_write_handler() добавляет функцию обратного вызова в метод write() для обработки определяемых пользователем типов. Можно добавлять множественные колбеки, но только один будет валиден для одного типа. Один и тот же колбек можно применять к разным типам.

def write_uuid(worksheet, row, col, uuid, format=None):
    string_uuid = str(uuid)
    return worksheet.write_string(row, col, string_uuid, format)

worksheet.add_write_handler(uuid.UUID, write_uuid)

my_uuid = uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')

# now use
my_uuid = uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
worksheet.write('A1', my_uuid)

Кроме того, можно писать строки и колонки

  • write_row() Напишите строку данных, начиная с (row, col).
  • write_column() Напишите столбец данных, начиная с (row, col)
  • set_row() Установите свойства для ряда ячеек.
  • set_row_pixels() Задайте свойства строки ячеек с высотой строки в пикселях.
  • set_column()
  • set_column_pixels()

Дополнительно:

  • autofit() Имитирует автоподгонку по ширине столбцов.
  • insert_image()
  • insert_chart()
  • insert_textbox()
  • insert_button()
  • data_validation()
  • conditional_format()
  • add_table()
  • write_comment()
  • show_comments()
  • set_comments_author()
  • get_name()
  • activate() Сделайте рабочий лист активным, то есть видимым рабочим листом.
  • select() Установите вкладку рабочего листа как выбранную.
  • hide()
  • set_first_sheet()
  • merge_range() Объединить диапазон ячеек.
  • autofilter() Установите область автофильтра на листе.
  • filter_column()
  • filter_column_list()
  • set_selection() Установите выбранную ячейку или ячейки на листе.
  • set_top_left_cell() Установите первую видимую ячейку в левом верхнем углу рабочего листа.
  • freeze_panes()
  • split_panes()
  • set_zoom()
  • right_to_left()
  • hide_zero()
  • set_background()
  • set_tab_color()
  • protect() Защитить элементы рабочего листа от модификации (усьанавливается пароль)
  • unprotect_range()
  • set_default_row() Установите свойства строки по умолчанию.
  • outline_settings()
  • set_vba_name()
  • ignore_errors()

Дополнительно можно задать параметры страницы (к примеру формат печатного листа и etc)

The Chart Class

The Chartsheet Class

The Exceptions Class

Смотир еще: