Excel書き込み (xlwt)
excel-pythonライブラリではExcelファイルの書き込みにxlwtパッケージを使用します。
まずはブックを作成・保存をしてみましょう。 ブック内に最低1つはシートが必要となりますので注意してください。
# -*- coding: utf-8 -*-
import xlwt
book = xlwt.Workbook()
book.add_sheet('NewSheet_1')
book.save('sample.xls')
「xlwt」モジュールをインポート後、「Workbook」クラスを生成します。 「Workbook」へ「NewSheet_1」という名前のシートを追加し、「save」でブックを保存します。
次はセル値の設定です。シートから直接設定する方法と、行を取得してから設定する方法があります。
# -*- coding: utf-8 -*-
import xlwt
book = xlwt.Workbook()
newSheet_1 = book.add_sheet('NewSheet_1')
newSheet_1.write(0, 0, 'A1')
newSheet_1_row_1 = newSheet_1.row(1)
newSheet_1_row_1.write(0, 'A2')
newSheet_1_row_1.write(1, 'B2')
newSheet_1_row_1.write(2, 'C2')
newSheet_1_row_1.write(3, 'D2')
newSheet_1_row_1.write(4, 'E2')
book.save('sample.xls')
8行目の「write」で値を設定しています。引数は(行, 列, 値)の順番です。 10行目から15行目のような設定方法は、1つの行に沢山の値を設定するケースで便利でしょう。
列幅の設定も可能です。先程のソースコードに少し追加してみましょう。
# -*- coding: utf-8 -*-
import xlwt
book = xlwt.Workbook()
newSheet_1 = book.add_sheet('NewSheet_1')
newSheet_1.write(0, 0, 'A1')
newSheet_1_row_1 = newSheet_1.row(1)
newSheet_1_row_1.write(0, 'A2')
newSheet_1_row_1.write(1, 'B2')
newSheet_1_row_1.write(2, 'C2')
newSheet_1_row_1.write(3, 'D2')
newSheet_1_row_1.write(4, 'E2')
newSheet_1_column_1 = newSheet_1.col(2)
newSheet_1_column_1.width = 5000
book.save('sample.xls')
17行目で対象の列を取得し、18行目で幅を設定しています。 保存されたファイルを開いてみると「C」の列幅が大きくなっている事を確認出来ると思います。
セルのフォント設定は下記の通りです。「write」の引数に「XFStyle」を設定します。
# -*- coding: utf-8 -*-
import xlwt
book = xlwt.Workbook()
newSheet_1 = book.add_sheet('NewSheet_1')
c_font_1 = xlwt.Font()
c_font_1.bold = True
c_style_1 = xlwt.XFStyle()
c_style_1.font = c_font_1
c_font_2 = xlwt.Font()
c_font_2.name = 'Arial'
c_style_2 = xlwt.XFStyle()
c_style_2.font = c_font_2
newSheet_1.write(0, 0, 'Font-Bold', c_style_1)
newSheet_1.write(1, 0, 'Font-Arial', c_style_2)
book.save('sample.xls')
セル「A1」を太字設定、セル「A2」をArialフォントへ設定しています。
罫線を引く事も可能です。「Borders」クラスを利用しましょう。
# -*- coding: utf-8 -*-
import xlwt
book = xlwt.Workbook()
newSheet_1 = book.add_sheet('NewSheet_1')
c_border = xlwt.Borders()
c_border.top = xlwt.Borders.THICK
c_border.bottom = xlwt.Borders.THICK
c_border.left = xlwt.Borders.THICK
c_border.right = xlwt.Borders.THICK
c_style = xlwt.XFStyle()
c_style.borders = c_border
newSheet_1.write(1, 1, 'Border' ,c_style)
book.save('sample.xls')
セル「B2」に罫線を引いています。
それぞれのセルの配色を変更します。「Pattern」クラスで設定可能です。
# -*- coding: utf-8 -*-
import xlwt
book = xlwt.Workbook()
newSheet_1 = book.add_sheet('NewSheet_1')
pattern_1 = xlwt.Pattern()
pattern_1.pattern = xlwt.Pattern.SOLID_PATTERN
pattern_1.pattern_fore_colour = 0x0A
c_style_1 = xlwt.XFStyle()
c_style_1.pattern = pattern_1
pattern_2 = xlwt.Pattern()
pattern_2.pattern = xlwt.Pattern.SOLID_PATTERN
pattern_2.pattern_fore_colour = 0x11
c_style_2 = xlwt.XFStyle()
c_style_2.pattern = pattern_2
pattern_3 = xlwt.Pattern()
pattern_3.pattern = xlwt.Pattern.SOLID_PATTERN
pattern_3.pattern_fore_colour = 0x0C
c_style_3 = xlwt.XFStyle()
c_style_3.pattern = pattern_3
newSheet_1.write(1, 1, 'Color-red', c_style_1)
newSheet_1.write(2, 1, 'Color-green', c_style_2)
newSheet_1.write(3, 1, 'Color-blue', c_style_3)
book.save('sample.xls')
セル「B2」を赤、「B3」を緑、「B4」を青へ配色設定しています。
「Alignment」クラスを利用し、セル内文字列の寄せ方を指定します。
# -*- coding: utf-8 -*-
import xlwt
book = xlwt.Workbook()
newSheet_1 = book.add_sheet('NewSheet_1')
alignment_1 = xlwt.Alignment()
alignment_1.horz = 1
c_style_1 = xlwt.XFStyle()
c_style_1.alignment = alignment_1
alignment_2 = xlwt.Alignment()
alignment_2.horz = 2
c_style_2 = xlwt.XFStyle()
c_style_2.alignment = alignment_2
alignment_3 = xlwt.Alignment()
alignment_3.horz = 3
c_style_3 = xlwt.XFStyle()
c_style_3.alignment = alignment_3
newSheet_1.write(1, 1, 'Align-left', c_style_1)
newSheet_1.write(2, 1, 'Align-center', c_style_2)
newSheet_1.write(3, 1, 'Align-right', c_style_3)
book.save('sample.xls')
セル「B2」を左寄せ(デフォルト)、「B3」を中央寄せ、「B4」を右寄せに設定しています。
Excel関数の埋め込みも可能です。代表的なExcel関数である「SUM」関数を埋め込んでみましょう。
# -*- coding: utf-8 -*-
import xlwt
book = xlwt.Workbook()
newSheet_1 = book.add_sheet('NewSheet_1')
newSheet_1.write(1, 1, '1')
newSheet_1.write(2, 1, '10')
newSheet_1.write(3, 1, '100')
newSheet_1.write(4, 1, xlwt.Formula('sum(B2,B3,B4)'))
book.save('sample.xls')
セル「B2」「B3」「B4」の合計値が「B5」へ表示されます。
