ここではExcel操作ライブラリであるOpenPyXLを用いたExcelファイルの書き込みに関連する機能について触れています。
ブックの保存とシートの追加
まずはブックを作成・保存をしてみましょう。ブック内に最低1つはシートが必要となりますが、ブックを作成した際Sheetというシート名で自動的に作成されます。次の例ではNewSheet_1というシート名で新たに作成しているため、SheetとNewSheet_1という2つのシートを持つブックが保存されます。
1 2 3 4 5 6 | import openpyxl book = openpyxl.Workbook() book.create_sheet( 'NewSheet_1' ) book.save( 'sample.xlsx' ) |
openpyxlモジュールをインポート後、Workbookクラスを生成します。WorkbookへNewSheet_1という名前のシートを追加し、saveでファイル名を指定して保存します。
セル値の設定
次はセル値の設定です。左上からのインデックス値を指定する方法と、<列><行>のようなセル指定を行う方法があります。
1 2 3 4 5 6 7 8 9 | 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行目」という指定方法)。
列幅設定
列幅の設定も可能です。先程のソースコードに少し追加してみましょう。
1 2 3 4 5 6 7 8 9 10 11 | 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へ各属性の設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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へ各属性の設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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へ各属性の設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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クラスを利用し、セル内文字列の寄せ方を指定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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関数を埋め込んでみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 | 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」へ表示されます。