Форматирование только заголовков с данными с помощью xlsxwriter

#python #pandas #xlsxwriter

#python #pandas #xlsx писатель #xlsxwriter

Вопрос:

У меня возникли небольшие проблемы с форматированием, используя worksheet.set_row() для применения только к столбцам с данными. В нынешнем виде, когда я открываю книгу, форматирование применяется ко всей строке заголовка, даже после того, как данные заканчиваются, и это выглядит немного неаккуратно, см. Ниже:

введите описание изображения здесь

Как вы можете видеть, форматирование продолжается для столбцов AL, AM, AN, AO и т.д… Поскольку в этих столбцах нет данных (или заголовков, если уж на то пошло), это выглядит немного неряшливо.

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

 header = workbook.add_format({'bold': True, 'bottom': 2, 'bg_color': '#F9DA04'})
worksheet.set_row(0, None, header)
  

Я понимаю, это потому, что worksheet.set_row() использует индекс строки. Я не могу найти никакой документации об этом, принимая диапазон, могу ли я как-то указать A1:AK1 или что-то в этом роде? Если это имеет значение, каждый рабочий лист является результатом pd.concat() нескольких фреймов данных, использующих Pandas.

Ответ №1:

Как вы можете видеть, форматирование продолжается для столбцов AL, AM, AN, AO и т.д..

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

могу ли я как-то указать A1: AK1 или что-то в этом роде?

Если вы хотите форматировать только определенные ячейки, то лучше всего применить формат только к этим ячейкам. Например:

 import xlsxwriter

workbook = xlsxwriter.Workbook('test.xlsx')
worksheet = workbook.add_worksheet()

header_data = ['EID', 'Notification', 'Test #']

header_format = workbook.add_format({'bold': True,
                                     'bottom': 2,
                                     'bg_color': '#F9DA04'})

for col_num, data in enumerate(header_data):
    worksheet.write(0, col_num, data, header_format)

workbook.close()
  

Вывод:

введите описание изображения здесь

Если это имеет значение, каждый рабочий лист является результатом pd.concat() нескольких фреймов данных с использованием Pandas.

Пример того, как форматировать заголовок из фрейма данных, смотрите в этом примере из документов XlsxWriter:

 import pandas as pd

# Create a Pandas dataframe from the data.
df = pd.DataFrame({'Data1': [10, 20, 30, 20],
                   'Data2': [10, 20, 30, 20],
                   'Data3': [10, 20, 30, 20],
                   'Data4': [10, 20, 30, 20]})

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

# Turn off the default header and skip one row to allow us to insert a
# user defined header.
df.to_excel(writer, sheet_name='Sheet1', startrow=1, header=False)

# Get the xlsxwriter workbook and worksheet objects.
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

# Add a header format.
header_format = workbook.add_format({'bold': True,
                                     'bottom': 2,
                                     'bg_color': '#F9DA04'})

# Write the column headers with the defined format.
for col_num, value in enumerate(df.columns.values):
    worksheet.write(0, col_num   1, value, header_format)

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

Вывод:

введите описание изображения здесь