Как мне создать таблицу с помощью модуля таблиц Openpyxl? - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь создать сценарий для обработки нескольких листов Excel одновременно, и один из шагов, которые я пытаюсь заставить обработать Python, - это создать таблицу, используя данные, передаваемые из фрейма данных pandas. Создание таблицы выглядит довольно просто, глядя на документацию.

Следуя примеру здесь :

        # define a table style
        mediumstyle = TableStyleInfo(name='TableStyleMedium2', showRowStripes=True)

        # create a table
        table = Table(displayName='IdlingReport', ref='A1:C35', tableStyleInfo=mediumstyle)

        # add the table to the worksheet
        sheet2.add_table(table)

        # Saving the report
        wb.save(openexcel.filename)
        print('Report Saved')

Однако при этом вместо использования данных создается пустая таблицаприсутствует в клетках «А1: С35». Кажется, я нигде не могу найти примеров, выходящих за рамки этих шагов, поэтому любая помощь в том, что я могу делать неправильно, очень ценится.

Данные в 'A1: C35' записываются в Excel следующим образом:

    while i < len(self.sheets):
        with pd.ExcelWriter(filename, engine='openpyxl') as writer:
            writer.book = excelbook
            writer.sheets = dict((ws.title, ws) for ws in excelbook.worksheets)
            self.df_7.to_excel(writer, self.sheets[i], index=False, header=True, startcol=0, startrow=0)
            writer.save()
        i += 1

Вывод выглядит примерно так

Time                Location                   Duration
1/01/2019     [-120085722,-254580042]           5 Min
1/02/2019     [-120085722,-254580042]           15 Min
1/02/2019     [-120085722,-254580042]           7 Min

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

1 Ответ

1 голос
/ 24 октября 2019

Ваша команда

# create a table
table = Table(displayName='IdlingReport', ref='A1:C35', tableStyleInfo=mediumstyle)

создает специальный объект Excel - пустую таблицу с именем IdlingReport.

Вы, вероятно,хотите что-то еще - заполнить лист вашей рабочей книги Excel данными из кадра данных Pandas.

Для этой цели есть функция dataframe_to_rows():

from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows

wb = Workbook()
ws = wb.active   # to rename this sheet:  ws.title = "some_name"
                 # to create a new sheet: ws = wb.create_sheet("some_name")

for row in dataframe_to_rows(df, index=True, header=True):
    ws.append(row)    # appends this row after a previous one

wb.save("something.xlsx")

См. Работа с кадрами данных Pandas и Учебное пособие .

...