Excel書き込み (XlsxWriter) | Python-izm

Excel書き込み (XlsxWriter)

ここではExcel操作ライブラリであるXlsxWriterを用いたExcelファイルの書き込みに関連する機能について触れています。
※XlsxWriterは読み込みに関する機能が提供されていません。python-excelもしくはOpenPyXLを利用して読み込みを行いましょう。

ブックの保存とシートの追加

まずはブックを作成・保存をしてみましょう。ブック内に最低1つはシートが必要となりますが、特にシートを追加しなかった場合はSheet1などの名称で作成されます。

import xlsxwriter
 
book = xlsxwriter.Workbook('sample.xlsx')
book.add_worksheet('NewSheet_1')
book.close()

xlsxwriterモジュールをインポート後、Workbookクラスを生成します。WorkbookへNewSheet_1という名前のシートを追加し、closeでブックオブジェクトを閉じます。

セル値の設定

次はセル値の設定です。左上からのインデックス値を指定する方法と、<列><行>のようなセル指定を行う方法があります。

import xlsxwriter
 
book = xlsxwriter.Workbook('sample.xlsx')
new_sheet_1 = book.add_worksheet('NewSheet_1')

new_sheet_1.write(0, 0, 'write A1')
new_sheet_1.write('A2', 'write A2')

book.close()

6行目のwriteではインデックス値を指定してセル値を設定しています。引数は(行, 列, 値)の順番です。また7行目のようにExcel上でも利用可能な指定方法で値を設定することもできます(「A2」のような「A列の2行目」という指定方法)。

列幅設定

列幅の設定も可能です。先程のソースコードに少し追加してみましょう。

import xlsxwriter
 
book = xlsxwriter.Workbook('sample.xlsx')
new_sheet_1 = book.add_worksheet('NewSheet_1')

new_sheet_1.write(0, 0, 'write A1')
new_sheet_1.write('A2', 'write A2')

new_sheet_1.set_column('A:A', 50)

book.close()

set_columnを用いて幅を設定しています。列の指定方法は<開始列>:<終了列>のように行い、例のソースコードではA列のみが対象になります(「A:B」のような指定方法ではA列とB列が対象)。保存されたファイルを開いてみると「A」の列幅が大きくなっている事を確認出来ると思います。

フォント設定

セルのフォント設定は下記の通りです。writeの引数にフォーマットを設定します。

import xlsxwriter
 
book = xlsxwriter.Workbook('sample.xlsx')
new_sheet_1 = book.add_worksheet('NewSheet_1')

format = book.add_format({'bold': True})
new_sheet_1.write('A1', 'write A1', format)

format = book.add_format()
format.set_bold()
format.set_font_color('blue')
format.set_font_name('Arial')
new_sheet_1.write('B1', 'write B1', format)

book.close()

セル「A1」を太字設定、セル「B1」を太字、文字色(青)、Arialフォントを設定しています。「A1」ではadd_formatの引数へ設定値を内包したディクショナリを利用し、「B1」では各種メソッドで設定を施してからフォーマットを適用しています。

ボーダー設定

罫線を引く事も可能です。フォント設定と同様にwriteの引数にフォーマットを設定します。

import xlsxwriter
 
book = xlsxwriter.Workbook('sample.xlsx')
new_sheet_1 = book.add_worksheet('NewSheet_1')

format = book.add_format({'border': 1})
new_sheet_1.write('B2', 'write B2', format)

format = book.add_format()
format.set_bottom()
format.set_top(2)
format.set_left(3)
format.set_right(6)
new_sheet_1.write('C3', 'write C3', format)

book.close()

セル「B2」ではadd_formatの引数へ設定値を内包したディクショナリを利用し、「C3」では各種メソッドで設定を施してからフォーマットを適用しています。「B2」で設定しているborderは上下左右すべてに適用され(メソッドではset_border)、「C3」ではそれぞれ異なる罫線を設定している形です(ディクショナリではbottom、top、left、right)。

カラー設定

こちらも同様にwriteの引数にフォーマットを設定します。次の例では背景色(bg_color)を設定していますが、前景色(fg_color)も設定することもできます。

import xlsxwriter
 
book = xlsxwriter.Workbook('sample.xlsx')
new_sheet_1 = book.add_worksheet('NewSheet_1')

format = book.add_format({'pattern': 1, 'bg_color': 'blue'})
new_sheet_1.write('B2', 'write B2', format)

format = book.add_format()
format.set_pattern(2)
format.set_bg_color('red')
new_sheet_1.write('C3', 'write C3', format)

format = book.add_format()
format.set_pattern(3)
format.set_bg_color('green')
new_sheet_1.write('D4', 'write D4', format)

book.close()

セル「B2」ではadd_formatの引数へ設定値を内包したディクショナリを利用し、「C3」「D4」では各種メソッドで設定を施してからフォーマットを適用しています。「B2」で設定しているpattern(1を設定)は完全な塗りつぶしで、「C3」「D4」ではそれぞれ異なるパターン(2、3を設定)で赤、緑を設定している形です。

文字寄せ設定

writeの引数にフォーマットを設定し、セル内文字列の寄せ方を指定します。

import xlsxwriter
 
book = xlsxwriter.Workbook('sample.xlsx')
new_sheet_1 = book.add_worksheet('NewSheet_1')

format = book.add_format({'align': 'center'})
new_sheet_1.write('B2', 'write B2', format)

format = book.add_format()
format.set_align('right')
new_sheet_1.write('C3', 'write C3', format)

format = book.add_format()
format.set_align('vcenter')
new_sheet_1.write('D4', 'write D4', format)

format = book.add_format()
format.set_align('top')
new_sheet_1.write('E5', 'write E5', format)

book.close()

セル「B2」は横方向の中央寄せ、「C3」は横方向の右寄せ、「D4」は縦方向の中央寄せ、「E5」は縦方向の上寄せになります。

Excel関数の埋め込み

Excel関数の埋め込みも可能です。代表的なExcel関数であるSUM関数を埋め込んでみましょう。

import xlsxwriter
 
book = xlsxwriter.Workbook('sample.xlsx')
new_sheet_1 = book.add_worksheet('NewSheet_1')

new_sheet_1.write('B2', 1)
new_sheet_1.write('B3', 10)
new_sheet_1.write('B4', 100)
new_sheet_1.write('B5', '=sum(B2,B3,B4)')

book.close()

セル「B2」「B3」「B4」の合計値が「B5」へ表示されます。