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

Excel書き込み (xlwt)

excel-pythonライブラリではExcelファイルの書き込みxlwtパッケージを用います。
※ここではすべての例でxls形式での保存を行っています。拡張子をxlsxにして保存することもできますが、そのファイルはエラーが発生して開くことができません。xlsx形式での出力はOpenPyXL、やXlsxWriterを利用しましょう。

xlwtのインストール

下記コマンドを入力しxlwtをインストールしてください。
※これはpipがインストールされていることを前提としています。インストールしていない場合はpipの使い方とインストールを参照してください。

pip install xlwt

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

まずはブックを作成・保存をしてみましょう。ブック内に最低1つはシートが必要となりますので注意してください。

import xlwt

book = xlwt.Workbook()
book.add_sheet('NewSheet_1')
book.save('sample.xls')

xlwtモジュールをインポート後、Workbookクラスを生成します。WorkbookへNewSheet_1という名前のシートを追加し、saveでブックを保存します。

セル値の設定

次はセル値の設定です。シートから直接設定する方法と、行を取得してから設定する方法があります。

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')

6行目のwriteで値を設定しています。引数は(行, 列, 値)の順番です。 8行目から13行目のような設定方法は、1つの行に沢山の値を設定するケースで便利でしょう。

列幅設定

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

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')

15行目で対象の列を取得し、16行目で幅を設定しています。保存されたファイルを開いてみると「C」の列幅が大きくなっている事を確認出来ると思います。

フォント設定

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

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クラスを利用しましょう。

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クラスで設定可能です。

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クラスを利用し、セル内文字列の寄せ方を指定します。

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関数の埋め込みも可能です。代表的なExcel関数であるSUM関数を埋め込んでみましょう。

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