ここでは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」へ表示されます。