【python】xlsxwriterの使い方を丁寧に
はじめに
本記事では,xlsxwriter
でエクセルに数値や文字列を書き込む方法を紹介します.また,文字列の一部を色付けする,セルを結合後に書き込む,リスト形式のデータを書き込む,列の幅を調整するようなことも記載しています.
目次
xlsxwriterとは
xlsxwriterは,エクセルファイル(.xlsx)への書き込みをサポートするpythonモジュールです.指定したセルに対して,数値や文字列を書き込むことができます.他にも,一般にエクセルで動作するような式の書き込みもできます.
この記事で紹介する内容を含む公式ドキュメント:
準備
モジュールのインポート
import xlsxwriter
もしエラーが出る場合は,
pip install xlsxwriter
でモジュールをインストールします.
エクセルファイルの読み込み
.Workbook(ファイル名)
でファイルを読み込みます.この後何かしら処理をしますが,最後は必ず.close()
で閉じてください.閉じないと,処理が反映されません.
存在しないファイルを開こうとした場合は,自動で新規作成されます.
import xlsxwriter book = xlsxwriter.Workbook('sample.xlsx') # 何かしらの処理 book.close()
シートの指定
エクセルファイルを読み込んだら,.get_worksheet_by_name(シート名)
でシートを指定します.
import xlsxwriter book = xlsxwriter.Workbook('sample.xlsx') sheet = book.get_worksheet_by_name('Sheet1') book.close()
もしシートを新規作成する場合は.add_worksheet()
を使います.
import xlsxwriter book = xlsxwriter.Workbook('sample.xlsx') sheet = book.add_worksheet() book.close()
値の書き込み
セルの指定方法
数値を書き込むにしろ,文字列を書き込むにしろ,書き込むセルを指定する必要があります.指定方法は2通りあるので,はじめに説明します.
セル名で指定する方法
A1
やC5
などのように,セル名を文字列として与えます.行番号,列番号で指定する方法
0,0
のように,セル名を2つの整数で与えます.最も左上のセルを0,0
だと思って,二次元配列のインデックスと思えば良いです.例えば,A1
は0,0
であり,C5
は4,2
です.
何でも書き込める.write()
xlsxwriter
には,各データ型に対応する書き込みメソッドが定義されています.例えば,数値を書き込むには.write_number()
,文字列を書き込むには.write_string()
を使います.他にも式やURLに対応するメソッドがあります.そして,これらを統合するようなメソッドとして.write()
があります..write()
は引数に対応する書き込みメソッドを呼んでくれるので,実質これだけ使えば事足ります.
以下のサンプルでは,数値,文字列,式を書き込んでいます.セルも2通りで指定しています.
import xlsxwriter book = xlsxwriter.Workbook('sample.xlsx') sheet = book.add_worksheet() sheet.write('A1', 5) # 数値. sheet.write(1, 0, '5') # 文字列.(1,0)=A2 sheet.write(2, 0, "=100+10.5") # 式.(2,0)=A3 book.close()
結果は以下の通りです.同じ5
でも,数値と文字列が区別されて書き込まれていることが分かります.また,式も機能していて,計算結果が表示されています.
文字列の一部を装飾する.write_rich_string()
文字列の一部を装飾するには,.write_rich_string()
を使います.これにより,太字やイタリック,色付けなどを混ぜて書き込めます.
.write_rich_string()
は,書き込みたい文字列をカンマ区切りで3つ以上与えられます.セルの情報を含めない引数が2つ以下の場合や,空文字列を書き込もうとするとエラーになります.(空文字列の書き込みは.write_blank()
という専用の関数があるので,.write_blank()
,もしくは.write()
で書きこむのは問題ありませんが,.write_rich_string()
ではサポートしていません.)
import xlsxwriter book = xlsxwriter.Workbook('sample.xlsx') sheet = book.add_worksheet() # カンマ区切りで sheet.write_rich_string(0, 0, 'bold', 'italic', 'color') book.close()
ここで,.add_format()
を用いて作成したフォーマット変数を,装飾したい文字列の直前に書きます.フォーマット変数は,例えば以下のように作成できます..
太字:
bold = book.add_format({'bold': True})
斜体:
italic = book.add_format({'italic': True})
- 赤字:
red = book.add_format({'color': 'red'})
このようにして作られた変数を,装飾したい文字列の直前に書きます.
import xlsxwriter book = xlsxwriter.Workbook('sample.xlsx') sheet = book.add_worksheet() bold = book.add_format({'bold': True}) italic = book.add_format({'italic': True}) red = book.add_format({'color': 'red'}) sheet.write_rich_string(0, 0, bold, 'bold', italic, 'italic', red, 'color') book.close()
この例では,以下のように装飾が行われます.
フォーマットは他にもあります.以下に簡単な一覧を示します.
目的 | .add_format()の中身 |
---|---|
太字 | {'bold': True} |
下線 | {'underline': True} |
斜体 | {'italic': True} |
フォント指定 | {'font_name': 'フォント名'} |
文字サイズ | {'font_size': 整数} |
文字色(色名指定) | {'color': 'red'}, {'color': 'blue'}など |
文字色(#000000指定) | {'color': '#FF0000'}, {'color': '#0000FF'}など |
(上記以外にも指定できます.詳しくはこちら:https://github.com/jmcnamara/XlsxWriter/blob/master/xlsxwriter/format.py)
中央揃えなどを実現するセルのフォーマット
.write_rich_string()
では,引数の一番最後にフォーマット変数を与えたとき,それをセルに対するフォーマットだと認識します.例えば,中央揃えにしたいセルがあるとき,
import xlsxwriter book = xlsxwriter.Workbook('sample.xlsx') sheet = book.add_worksheet() center = book.add_format({'align': 'center'}) sheet.write_rich_string(0, 0, 'This is ', 'center ', 'string', center) book.close()
というように,.write_rich_string()
の最後にフォーマット変数を指定します.セルに対するフォーマットは,以下のようなものがあります.
目的 | add_format()の中身 |
---|---|
(横方向の)中央揃え | {'align': 'center'} |
左揃え | {'align': 'left'} |
右揃え | {'align': 'right'} |
セルの色(色名指定) | {'bg_color': 'red'} |
セルの色(#000000指定) | {'bg_color': '#FF0000'} |
枠線 | {'border': 整数} |
(縦方向の)中央揃え | {'valign': 'vcenter'} |
文字列を折り返して全体を表示 | {'text_wrap': True} |
(上記以外にも指定できます.詳しくはこちら:https://github.com/jmcnamara/XlsxWriter/blob/master/xlsxwriter/format.py)
セルを結合して書き込む.merge_range()
特定の範囲のセルを結合して書き込むには,.merge_range()
を使います.例えば,A1
からC5
までを結合して書き込む場合は,
import xlsxwriter book = xlsxwriter.Workbook('sample.xlsx') sheet = book.add_worksheet() sheet.merge_range('A1:C5', 'string') # セルを文字列で指定 # sheet.merge_range(0, 0, 4, 2, 'string') # セルをindexで指定 book.close()
と書けます.セルの情報は文字列でも整数でも指定できます.結合後のセルのフォーマットも指定できます(前述した,引数の一番最後にフォーマット変数を書く方法で).
リストのデータを特定のセルから行/列方向に書き込む
複数のデータがリストとして存在しているとします.これを特定のセルを始点として書き込む方法です.
行方向に書き込む.write_row()
以下の例では,C2
のセルから右方向にデータを書き込みます.
import xlsxwriter book = xlsxwriter.Workbook('sample.xlsx') sheet = book.add_worksheet() data = ['A', 'B', 'C'] sheet.write_row('C2', data) # セルを文字列で指定 # sheet.write_row(1, 2, data) # セルをindexで指定 book.close()
列方向に書き込む.write_column()
以下の例では,C2
のセルから下方向にデータを書き込みます.
import xlsxwriter book = xlsxwriter.Workbook('sample.xlsx') sheet = book.add_worksheet() data = ['A', 'B', 'C'] sheet.write_colmun('C2', data) # セルを文字列で指定 # sheet.write_column(1, 2, data) # セルをindexで指定 book.close()
セルの幅を指定
.set_column()
を使用して,特定の範囲のセルの幅を設定できます.以下の例では,A列からC列の幅を20ポイントに設定します.
import xlsxwriter book = xlsxwriter.Workbook('sample.xlsx') sheet = book.add_worksheet() sheet.set_column('A:C', 20) # セルを文字列で指定 # sheet.set_column(0, 2, 20) # セルをindexで指定 book.close()
おわりに
xlsxwriter
を用いてエクセルファイルに値を書き込む方法を紹介しました.何かご指摘などありましたら,コメントにお願いいたします.