ここではExcel操作ライブラリであるOpenPyXLを用いたExcelファイルの書き込みに関連する機能について触れています。
ブックの保存とシートの追加
まずはブックを作成・保存をしてみましょう。ブック内に最低1つはシートが必要となりますが、ブックを作成した際Sheetというシート名で自動的に作成されます。次の例ではNewSheet_1というシート名で新たに作成しているため、SheetとNewSheet_1という2つのシートを持つブックが保存されます。
import openpyxl book = openpyxl.Workbook() book.create_sheet('NewSheet_1') book.save('sample.xlsx')
openpyxlモジュールをインポート後、Workbookクラスを生成します。WorkbookへNewSheet_1という名前のシートを追加し、saveでファイル名を指定して保存します。
セル値の設定
次はセル値の設定です。左上からのインデックス値を指定する方法と、<列><行>のようなセル指定を行う方法があります。
import openpyxl book = openpyxl.Workbook() active_sheet = book.active active_sheet.cell(column=1, row=1, value='write A1') active_sheet['A2'] = 'write A2' book.save('sample.xlsx')
activeにはブック内において現在選択されているシート(アクティブなシート)が格納されています。先に述べた通り、ブックを作成した際Sheetというシート名で自動的に作成されるため、例のように特にシートを追加、選択しない限りはSheetが取得できます。6行目では列1、行1のセルに対して値を設定しています。開始値は0ではなく1なので注意してください(列1、行1の指定で最も左上のセル「A1」が対象)。また7行目のようにExcel上でも利用可能な指定方法で値を設定することもできます(「A2」のような「A列の2行目」という指定方法)。
列幅設定
列幅の設定も可能です。先程のソースコードに少し追加してみましょう。
import openpyxl book = openpyxl.Workbook() active_sheet = book.active active_sheet.cell(column=1, row=1, value='write A1') active_sheet['A2'] = 'write A2' active_sheet.column_dimensions['A'].width = 50 book.save('sample.xlsx')
column_dimensionsを用いて幅を設定します。保存されたファイルを開いてみると「A」の列幅が大きくなっている事を確認出来ると思います。
フォント設定
セルのフォント設定は下記の通りです。Fontへ各属性の設定を行います。
import openpyxl book = openpyxl.Workbook() active_sheet = book.active active_sheet.cell(column=1, row=1, value='write A1') active_sheet['A2'] = 'write A2' cell_A1 = active_sheet['A1'] cell_A1.font = openpyxl.styles.Font(bold=True) font_A2 = openpyxl.styles.Font() font_A2.bold = True font_A2.color = openpyxl.styles.colors.BLUE font_A2.name = 'Arial' active_sheet['A2'].font = font_A2 book.save('sample.xlsx')
セル「A1」を太字設定、セル「A2」を太字、文字色(青)、Arialフォントを設定しています。少ない設定ならば「A1」のように、多めの設定であれば「A2」のような形で利用するとよいでしょう。
ボーダー設定
罫線を引く事も可能です。Borderへ各属性の設定を行います。
import openpyxl from openpyxl.styles.borders import ( Border, Side, BORDER_THIN, BORDER_DOTTED, BORDER_DOUBLE, BORDER_MEDIUM, ) book = openpyxl.Workbook() active_sheet = book.active active_sheet.cell(column=2, row=2, value='write B2') active_sheet['C3'] = 'write C3' active_sheet['B2'].border = Border( left=Side(style=BORDER_THIN), right=Side(style=BORDER_THIN), top=Side(style=BORDER_THIN), bottom=Side(style=BORDER_THIN), ) border_C3 = Border() border_C3.left = Side(style=BORDER_DOTTED) border_C3.right = Side(style=BORDER_DOUBLE) border_C3.top = Side(style=BORDER_MEDIUM) border_C3.bottom = Side(style=BORDER_THIN) active_sheet['C3'].border = border_C3 book.save('sample.xlsx')
セル「B2」には上下左右すべて同じ罫線を適用し、「C3」ではそれぞれ異なる罫線を設定している形です。指定可能なstyleは例で使用した以外にも下記にようなものがあります。
- BORDER_NONE
- BORDER_DASHDOT
- BORDER_DASHDOTDOT
- BORDER_DASHED
- BORDER_HAIR
- BORDER_MEDIUMDASHDOT
- BORDER_MEDIUMDASHDOTDOT
- BORDER_MEDIUMDASHED
- BORDER_SLANTDASHDOT
- BORDER_THICK
塗りつぶし設定
セルの塗りつぶし設定は下記の通りです。PatternFillへ各属性の設定を行います。
import openpyxl from openpyxl.styles.colors import ( Color, BLUE, RED, GREEN, ) from openpyxl.styles.fills import ( PatternFill, FILL_SOLID, FILL_PATTERN_MEDIUMGRAY, FILL_PATTERN_GRAY125, ) book = openpyxl.Workbook() active_sheet = book.active active_sheet.cell(column=2, row=2, value='write B2') active_sheet['C3'] = 'write C3' active_sheet['D4'] = 'write D4' active_sheet['B2'].fill = PatternFill( patternType=FILL_SOLID, fgColor=openpyxl.styles.colors.Color(rgb=BLUE), ) fill_C3 = PatternFill() fill_C3.patternType = FILL_PATTERN_MEDIUMGRAY fill_C3.fgColor = RED active_sheet['C3'].fill = fill_C3 fill_D4 = PatternFill() fill_D4.patternType = FILL_PATTERN_GRAY125 fill_D4.fgColor = GREEN active_sheet['D4'].fill = fill_D4 book.save('sample.xlsx')
「B2」で設定しているFILL_SOLIDは完全な塗りつぶしで、「C3」「D4」ではそれぞれ異なるパターン(FILL_PATTERN_MEDIUMGRAY、FILL_PATTERN_GRAY125を設定)で赤、緑を設定している形です。指定可能なpatternTypeは例で使用した以外にも下記にようなものがあります。
- FILL_PATTERN_DARKDOWN
- FILL_PATTERN_DARKGRAY
- FILL_PATTERN_DARKGRID
- FILL_PATTERN_DARKHORIZONTAL
- FILL_PATTERN_DARKTRELLIS
- FILL_PATTERN_DARKUP
- FILL_PATTERN_DARKVERTICAL
- FILL_PATTERN_GRAY0625
- FILL_PATTERN_LIGHTDOWN
- FILL_PATTERN_LIGHTGRAY
- FILL_PATTERN_LIGHTGRID
- FILL_PATTERN_LIGHTHORIZONTAL
- FILL_PATTERN_LIGHTTRELLIS
- FILL_PATTERN_LIGHTUP
- FILL_PATTERN_LIGHTVERTICAL
文字寄せ設定
Alignmentクラスを利用し、セル内文字列の寄せ方を指定します。
import openpyxl from openpyxl.styles import Alignment book = openpyxl.Workbook() active_sheet = book.active active_sheet.cell(column=2, row=2, value='write B2') active_sheet['C3'] = 'write C3' active_sheet['D4'] = 'write D4' active_sheet['E5'] = 'write E5' active_sheet['B2'].alignment = Alignment( horizontal='center', vertical='bottom', ) align_C3 = Alignment() align_C3.horizontal = 'right' align_C3.vertical = 'bottom' active_sheet['C3'].alignment = align_C3 align_D4 = Alignment() align_D4.horizontal = 'left' align_D4.vertical = 'center' active_sheet['D4'].alignment = align_D4 align_E5 = Alignment() align_E5.horizontal = 'left' align_E5.vertical = 'top' active_sheet['E5'].alignment = align_E5 book.save('sample.xlsx')
セル「B2」は横方向の中央寄せ、「C3」は横方向の右寄せ、「D4」は縦方向の中央寄せ、「E5」は縦方向の上寄せになります。
Excel関数の埋め込み
Excel関数の埋め込みも可能です。代表的なExcel関数であるSUM関数を埋め込んでみましょう。
import openpyxl from openpyxl.styles import Alignment book = openpyxl.Workbook() active_sheet = book.active active_sheet['B2'] = 1 active_sheet['B3'] = 10 active_sheet['B4'] = 100 active_sheet['B5'] = '=sum(B2,B3,B4)' book.save('sample.xlsx')
セル「B2」「B3」「B4」の合計値が「B5」へ表示されます。