@exctac

XlsxWriter. Описание рабочей книги/листов/таблиц в виде класса?

Добрый день.
Существует такой пакет XlsxWriter для экспорта данных в excel. Мне нужно было сформировать всевозможные отчеты, которые представляли собой разные таблицы, с разной структурой, много листов и тд, на основе json данных. Прочитав документацию, я понял что создание рабочей книги, листов, таблиц, форматирование ячеек и т.д проходит в достаточно неудобной форме, а именно, нужно создать инстанс книги, добавлять листы, потом в каждый лист вставить ячейку/строку/столбец/таблицу, задать определенные координаты, при этом координаты нужно знать и запоминать что бы одна таблица не налезла на другую. И так каждую таблицу. В итоге получается много последовательного и повторяющегося кода. Думаю кто сталкивался с данной библиотекой понимает.

Возник вопрос, существует ли какая то библиотека, что бы можно было всю будущую рабочую книгу, всю ее структуру и содержимое, настройки, форматирование описать в виде класса, на подобие моделей джанго, или рест сериалайзера, потом создаешь типо вьюху, которой передаешь данные которые будут соответсвтовать описанной структуре, вызываешь метод render_to_xls, и вуаля все автоматом собирается?

Сам не нашел. Подумываю уже самостоятельно написать что то подобное.
  • Вопрос задан
  • 4312 просмотров
Пригласить эксперта
Ответы на вопрос 2
KEugene
@KEugene
Хм... что-то не то.
Вот пример с сайта https://xlsxwriter.readthedocs.io/

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()


Создали книгу.
Добавили лист. Лист этот и есть набор ячеек.
Все, дальше, практически, как в VBA. Можо "поячеечно" задавать значения. Можно попробовать прямо массивом (там же пример с пандой).
import pandas as pd

# Create a Pandas dataframe from the data.
df = pd.DataFrame({'Data': [10, 20, 30, 20, 15, 30, 45]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')

# Close the Pandas Excel writer and output the Excel file.
writer.save()


Куда еще проще?
Ответ написан
@Needlyfire
Belarus
По поводу writer.save(). Не работает у меня. Attributeerror: 'Xsxwriter' object has no attribute 'save'/
Прописал атрибут writer.close() - заработало.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы