OpenPyXL㉑ (セル結合)

セル結合

Worksheetオブジェクトの merge_cellsメソッド を使うと、複数のセルを1つのセルに結合できます。

引数にセル範囲を指定すると、すべてのセルが 左上のセル に結合されます。

下記のサンプルコードでは、A1とA2を1つのセル に結合しています。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
import openpyxl

book = openpyxl.Workbook()
sheet = book.active

sheet.merge_cells('A1:A2') # セルを結合
sheet['A1'] = '結合1' # セルに入力
#sheet['A2'] = '結合2' # エラー(AttributeError: 'MergedCell' object attribute 'value' is read-only)

book.save('Test.xlsx')

結合したセルに値を設定する場合は、左上のセル(A1)を指定します。

左上のセル以外(A2)に値を設定しようとすると AttributeError が発生します。

[Test.xlsx]

保存したExcelファイルを開くと、A1とA2の セルが結合 されていることを確認できます。

OpenPyXL⑳ (セルの幅と高さを設定)

セルの幅と高さを設定

Worksheetオブジェクトには、セルの幅や高さ を保持するオブジェクトがあります。

  • column_dimensionsオブジェクト
    セルの幅を保持します。
    widthプロパティ でセル幅を設定します。
    0から409まで の整数、または小数を設定可。単位はポイント(pt)。
  • row_dimensionsオブジェクト
    セルの高さを保持します。
    heightプロパティ でセルの高さを設定します。
    0から255まで の整数、または小数を設定可。単位はポイント(pt)。

セルの幅と高さを設定するサンプルコードは下記のとおりです。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
import openpyxl
book = openpyxl.Workbook() # Workbookオブジェクトを生成
sheet = book.active # アクティブシートを取得

sheet['A1'] = '幅を設定' # A1セルに文字列を入力
sheet.column_dimensions['A'].width = 50 # A列の幅を30に設定
print('A列の幅 =>', sheet.column_dimensions['A'].width)

sheet['B2'] = '高さを設定' # B2セルに文字列を入力
sheet.row_dimensions[2].height = 80 # 2行目の高さを100に設定
print('2行目の高さ', sheet.row_dimensions[2].height)

book.save('Test.xlsx') # ファイル保存

[実行結果]

[Test.xlsx]

保存されたExcelファイルを開くと、セルの幅と高さ が変更されていることを確認することができます。

OpenPyXL⑲ (数式を入力)

数式を入力

Excelの数式を設定する場合は、数式を文字列 でセルに書き込みます。

sheet[‘A3’] = ‘=SUM(A1:A2)’

上記のように設定すると、ワークシートの A3セルA1からA2までの値を合計 して表示することができます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
import openpyxl

book = openpyxl.Workbook() # Excelブックを生成
sheet = book.active # アクティブなワークシートを取得
sheet['A1'] = 50 # A1セルに値を入力
sheet['A2'] = 30 # A2セルに値を入力
sheet['A3'] = '=SUM(A1:A2)' # A3セルにSUM()関数を入力
print('A3セル', sheet['A3'].value) # A3セルの数式を確認

book.save('test.xlsx') # ブックを保存

[実行結果]

A3セルに ‘=SUM(A1:A2)’ という数式が設定されていることを確認できます。

[Test.xlsx]

保存されたExcelファイルを確認すると、A3セルに A1からA2までの合計値 が表示されています。

OpenPyXL18 (値を設定)

値を設定

エクセルに値を設定するためには

  Worksheetオブジェクト[‘セル番地’] = 書き込む値

のように指定します。

辞書型の変数に値を設定する方法と同じ感じです。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
import openpyxl
book = openpyxl.Workbook() # Workbookオブジェクトを生成
sheet = book['Sheet'] # Worksheetオブジェクトを取得

sheet['A1'] = '文字列データ' # A1セルに値設定
sheet['B1'] = 1000 # B1セルに値設定

print('A1のデータ =>', sheet['A1'].value)
print('B1のデータ =>', sheet['B1'].value)

[実行結果]

エクセルに値が設定できることを確認できました。

OpenPyXL⑰ (ワークシート削除)

ワークシート削除

Workbookオブジェクトremove_sheetメソッド を使うと、任意のワークシートを削除できます。

引数には ワークシート名 を指定します。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import openpyxl

book = openpyxl.Workbook() # Workbookオブジェクトを生成
book.create_sheet()
book.create_sheet()
book.create_sheet()
print('削除前 =>', book.sheetnames)

# Sheetを削除
book.remove(book['Sheet'])
print('Sheet 削除後 =>', book.sheetnames)

book.remove(book['Sheet2'])
print('Sheet2 削除後 =>', book.sheetnames)

[実行結果]

指定したワークシートを削除することを確認できました。

OpenPyXL⑯ (位置と名前を指定してワークシート追加)

位置と名前を指定してワークシート追加

Workbookオブジェクトcreate_sheetメソッド の名前付き引数を使うと、指定した位置任意の名前で新規のワークシートを追加することができます。

  • index
    挿入する位置。0から始まるインデックス値を指定。
  • title
    追加するシート名。

[Google Colaboratory]

1
2
3
4
5
6
7
8
import openpyxl

book = openpyxl.Workbook() # Workbookオブジェクトを生成
print('[追加前]', book.sheetnames)

# 名前を「2番目」にして先頭から2番目の位置に追加する
book.create_sheet(index=1, title='2番目')
print('[追加後]', book.sheetnames)

[実行結果]

2番目の位置 にシート名 2番目 として、シートを追加することができました。

OpenPyXL⑮ (ワークシート追加)

ワークシート追加

Workbookオブジェクトcreate_sheetメソッド を使うと、新規のワークシートを追加することができます。

[Google Colaboratory]

1
2
3
4
5
6
7
import openpyxl

book = openpyxl.Workbook() # Workbookオブジェクトを生成
print('[シート追加前]', book.sheetnames)

book.create_sheet() # シート追加
print('[シート追加後]', book.sheetnames)

[実行結果]

create_sheetメソッド はデフォルトで Sheet1 という名前のWorksheetオブジェクトを追加します。

それ以降、追加するたびに Sheet2、Sheet3 ・・・ というシート名が設定されます。

OpenPyXL⑭ (ワークブック保存)

ワークブック保存

Workbookオブジェクトsaveメソッド を使うと、Excelファイルとして保存することができます。

第1引数にファイル名を指定すると、カレントディレクトリにExcelファイルが保存されます。

ファイル・パスを指定すると、カレントディレクトリ以外にExcelファイルを保存することができます。

[Google Colaboratory]

1
2
3
4
import openpyxl

book = openpyxl.Workbook() # Workbookオブジェクトを生成
book.save('Test.xlsx') # 名前を付けて保存する

[実行結果]

ブラウザ左側のフォルダアイコンを選択すると、Test.xlsl という新規のエクセルファイルが作成されていることが確認できます。

OpenPyXL⑬ (新規ワークブック作成)

新規ワークブック作成

新規のWorkbookオブジェクトを作成するには、openpyxl.Workbookコンストラクタ を使用します。(4行目)

新規のWorkbookオブジェクトを作成すると、Sheet という名前のワークシートが作成されます。

また、アクティブなワークシート名を参照するには active.title を使います。

[Google Colaboratory]

1
2
3
4
5
6
# 新規のWorkbookオブジェクトを生成する
import openpyxl

book = openpyxl.Workbook() # Workbookオブジェクトを生成
print('全ワークシート名', book.sheetnames)
print('アクティブなワークシート名', book.active.title)

[実行結果]

ワークシート名を変更するには、Worksheetオブジェクトのtitleプロパティ に新しいシート名を設定します。

[Google Colaboratory]

1
2
3
4
# ワークシートに独自の名前を付ける
sheet = book['Sheet'] # Sheetを取得
sheet.title = 'シート名' # sheetにはWorksheetオブジェクトが格納されている
print('変更したシート名', book.sheetnames) # 名前が変更されたか確認する

[実行結果]

OpenPyXL⑫ (指定したセル範囲のデータ取得)

指定したセル範囲のデータ取得

Worksheetオブジェクト に対して、下記のように指定すると、指定したセル範囲のデータ を取得することができます。

   Worksheet[‘開始セル番地’: ‘終了セル番地’]

レコード単位でCellオブジェクトを タプルにしたタプル が返されるので、2重にした forループ を使って全てのデータをレコード単位で取り出すことができます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
import openpyxl

book = openpyxl.load_workbook('テスト.xlsx') # Excelブックを取得
sheet = book['Sheet1'] # Sheet1を取得

for row_obj in sheet['A2':'D6']: # ①1行のレコードを取り出す
for cell_obj in row_obj: # ②レコードからセルを取り出す
print(cell_obj.coordinate, # セル番地
cell_obj.value # セルの値
)
print('--- 1レコード(1行)終わり ---') # 1行のレコードの区切りを示す

読み込むエクセルファイルは下記になります。

[テスト.xlsx]

[実行結果]

指定したセル範囲(A2〜D6)のデータを取得することができました。