2016-10-07 4 views
2

У меня есть лист excel, который поступает из фрейма данных pandas. Затем я использую Xlsxwriter для добавления формул, новых столбцов и форматирования. Проблема в том, что я, по-видимому, умею форматировать то, что я написал, используя xlsxwriter, и ничего из базы данных. Так что я получаю что-то вроде этого half formatted tableXlsxwriter - Устранение неполадок pandas dataframe cells с помощью xlsxwriter

Как видно из изображения, два столбца из кадра данных остаются нетронутыми. У них должно быть какое-то форматирование по умолчанию, которое переопределяет мой.

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

export = "files/sharepointExtract.xlsx" 
df = pd.read_excel(export)# df = dataframe 

writer = pd.ExcelWriter('files/new_report-%s.xlsx' % (date.today()), engine = 'xlsxwriter') 
workbook = writer.book 

# Code to make the header red, this works fine because 
# it's written in xlsxwriter using write.row() 

colour_format = workbook.add_format() 
colour_format.set_bg_color('#640000') 
colour_format.set_font_color('white') 
worksheet.set_row(0, 15, colour_format) 

table_body_format = workbook.add_format() 
table_body_format.set_bg_color('blue') 

for row in worksheet.rows: 
    row.set_row(0,15, table_body_format) 

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

+0

Можете ли вы включить часть кода, в котором вы также пишете данные, чтобы мы могли видеть, как это относится к стилю? – ASGM

+0

«У них должно быть какое-то форматирование по умолчанию, которое переопределяет мой». Это верно. В Pandas по умолчанию используется форматирование столбца/заголовка по умолчанию, которое отменяет форматирование строк и столбцов, применяемое через интерфейс XlsxWriter. Насколько я знаю, нет никакого публичного api для изменения этого форматирования (кроме 'datetime_format' и' date_format'). – jmcnamara

+0

@ASGM Обновлен код для включения, где я пишу данные – King

ответ

1

должны работать:

import pandas as pd 
from datetime import date 

export = "files/sharepointExtract.xlsx" 
df = pd.read_excel(export) 

writer = pd.ExcelWriter('files/new_report-{}.xlsx'.format(date.today()), engine ='xlsxwriter') 
df.to_excel(writer, sheet_name='Sheet1', startrow=1 , startcol=0, header=False, index=False, encoding='utf8') 

workbook = writer.book 
worksheet = writer.sheets['Sheet1'] 

# Code to make the header red 
colour_format = workbook.add_format() 
colour_format.set_bg_color('#640000') 
colour_format.set_font_color('white') 

# Code to make the body blue  
table_body_format = workbook.add_format() 
table_body_format.set_bg_color('blue') 

worksheet.set_row(0, 15, colour_format) 
worksheet.set_column('A:Z', 15, table_body_format) 

# Write the header manually 
for colx, value in enumerate(df.columns.values): 
    worksheet.write(0, colx, value) 

writer.save() 

Когда Панды используются для записи заголовка он использует свой собственный стиль форматирования, который перезаписывает основную версию xlsxwriter. Самый простой подход - остановить его от записи заголовка и заставить его записать остальные данные из строки 1 и далее (не 0). Это позволяет избежать изменения форматирования. Затем вы можете легко написать свой собственный заголовок, используя значения столбца из фрейма данных.