2017-10-13 11 views
2

私はpandasとxlsxwriterを使用して、いくつかのデータフレームをExcelにエクスポートしてフォーマットしています。パンダ:Excelにエクスポートするときに行と列の両方をフォーマットする方法(行形式が優先)

xlsxwriterドキュメントがその言及: http://xlsxwriter.readthedocs.io/worksheet.html?highlight=set_column

A row format takes precedence over a default column format 

優先順位を使用して、パーセンテージとして列Bをフォーマットし、次に2として太字の行と、セルB2を太字および%にはならないだろう、ということを意味 - 太字で表示されますが、%では表示されません!

私は以下の例を提供しました。 周囲に道がありますか?おそらくxlsxwriter以外のエンジンですか?おそらく、データフレームをエクスポートした後でフォーマットを適用してExcelにする方法がありますか?

行の最初と最後の列をフォーマットするかどうかには違いはありません。

以下の例では表示されませんが、私のコードでは、すべて同じ列のデータフレームを同じExcelシートにエクスポートします。データフレームはExcel Pivotテーブルと同等で、下部に「合計」行があります。ヘッダー行と合計行を太字にし、各列にデータ(%、千​​、数百万など)に応じた特定の書式を設定します。以下のサンプルコード。

思考?ありがとう!

import pandas as pd 

writer = pd.ExcelWriter('test.xlsx') 
wk = writer.book.add_worksheet('Test') 

fmt_bold = writer.book.add_format({'bold':True}) 
fmt_pct = writer.book.add_format({'num_format': '0.0%'}) 

wk.write(1,1,1) 
wk.write(2,1,2) 

wk.set_column(1,1, None, fmt_pct) 
wk.set_row(1,None, fmt_bold) 

writer.close() 

答えて

1

この場合、行と列のフォーマットの組み合わせである別のフォーマットを作成し、それをセルに適用する必要があります。

これを行うには、データフレームを反復処理し、XandxWriterをPandas-Excelインターフェイスを使用せずに直接呼び出す必要があります。

また、OpenPyXLをpandas Excelエンジンとして使用することもできます。最近のバージョンのPandasインターフェイスでは、OpenPyXLを使用するときに、データフレームを書き込んだ後にExcelデータに書式を追加する機能が追加されました。

+0

私が正しく理解すれば、書式設定セルをセルごと適用する必要があるということですか?言い換えれば、単に%Bの列B、太字の行2、B2を太字で表示し、Excelでファイルを手動で開く場合の方法を%で表す方法はありません。 代わりに、B2:太字と%、C2太字のみ、B3:%のみなどを設定するスクリプトを用意する必要があります。 また、繰り返しを言うときは、 to_excel()メソッドに頼るのではなく、データフレームのセルをセルで記述しますか? –

+0

OpenPyXLはデータフレームを書いた後に書式を追加できると言っていますが、すでにXlsxWriterで書いていますので少し混乱します。私はエンジンとしてxlsxwriterを使用してto_excel()メソッドを使用してデータフレームをエクスポートし、set_format()およびset_columnを使用してExcelにエクスポートしたデータフレームに書式を適用します。 –

+0

PSおそらく、私はwin32comモジュールを使ってPython内からExcelを制御できますか?基本的に私が望むのは、Excelを手動で使用するときに何が起こるかを模倣することです。これは、書式を置き換えるのではなく、追加することです。 –

2

as @jmcnamara注意openpyxlは、基本的にワークシート内のデータフレームを処理できるため、さまざまな書式設定オプションを提供します。 NB。 openpyxlは行または列の形式をサポートしていません。

openpyxl dataframe_to_rows()関数は、データフレームを値のジェネレータに行単位で変換し、何らかのフォーマットや追加の処理を適用することができます。

+0

ありがとうございます。たぶんそれは私ですが、これらの点はopenpyxlとxlsxwriterのどちらのドキュメントでも明確には分かりませんでした。 具体的には、Excelでは、既存のものを削除せずに書式設定を適用できるため、Excelでは優先順位が同じように誤解を招くことがあります。列Bが%として書式設定されている場合は、行2を選択して太字にし、B2を太字で%で表示します。これらのパッケージではこれを行うことができないので、Excelを模倣しません。 –

+0

私はwin32comモジュールを調べる必要があります。すべての単一細胞を1つずつ再フォーマットすることは苦痛であろう。 Excelにエクスポートしてxlsxwriterで列の書式を適用してから、同じファイルを再度開き、win32comで行の書式を適用することをお勧めします。 –

+0

どちらの方法でも、書式設定は常に**セルごとに行われます。 Excelで提案されている行と列の書式は誤解を招きます。 win32comは遅く、xlwingsを使う方が良いですが、openpyxlの名前付きスタイルは高速です。 –

関連する問題