2016-10-07 15 views
2

私はpandasデータフレームから得たExcelシートを持っています。次に、Xlsxwriterを使って数式、新しい列と書式を追加します。問題は、私はxlsxwriterを使って書いたものだけで、データフレームから来たものはフォーマットできないようです。だから私が得るものは、このようなものですhalf formatted tableXlsxwriter - xlsxwriterを使用して問題をフォーマットするpandasデータフレームセル

画像からわかるように、データフレームの2つの列はそのままです。彼らは私の優先されている何らかの種類のデフォルトのフォーマットを持っている必要があります。

ワークシートをデータフレームに変換する方法がわからないので、以下のコードは明らかに完全に間違っていますが、私が探しているもののアイデアを与えるだけです。

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) 

このコードでは、属性エラーが発生しますが、forループがなくても、画像に表示される内容がわかります。

+0

データの書いた部分にコードの部分を含めて、スタイリングとの関連を確認できますか? – ASGM

+0

"彼らは私に優先されている何らかの種類のデフォルト書式を持っていなければなりません。"それは正しいです。 Pandasには、XlsxWriterインターフェイスを通じて適用される行/列の書式設定をオーバーライドする既定の列/ヘッダーの書式設定があります。私の知る限り、 'datetime_format'と' date_format'を除いて、その書式を変更するための公開APIはありません。 – 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ではなく)。これにより、書式設定が変更されるのを防ぎます。その後、データフレームの列の値を使用して、独自のヘッダを簡単に記述することができます。

関連する問題