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)のデータを取得することができました。

OpenPyXL⑪ (行単位で取り出す)

行単位で取り出す

rowsプロパティ が返すオブジェクトのタプルには、全ての行単位Cellオブジェクト が格納されています。

forループを2重 にすることで、全てのデータを 行単位 で取得することができます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
import openpyxl, pprint

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

for cells_obj in tuple(sheet.rows): # 1行のレコードを取り出す
for cell_obj in cells_obj: # レコードからCellオブジェクトを取り出す
print(cell_obj.value)
print('--- 1行のレコード終わり ---') # 1行のレコードの区切りを示す

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

[テスト.xlsx]

[実行結果]

全てのデータを 行単位 で取得することができました。

OpenPyXL⑩ (列単位で取り出す)

列単位で取り出す

columnsプロパティ が返すオブジェクトのタプルには、全ての列単位Cellオブジェクト が格納されています。

forループを2重 にすることで、全てのデータを 列単位 で取得することができます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
import openpyxl, pprint
book = openpyxl.load_workbook('テスト.xlsx') # Excelブックを取得
sheet = book['Sheet1'] # Sheet1を取得

for cells_obj in tuple(sheet.columns): # 列データのタプルから1列ずつ取り出す
for cell_obj in cells_obj:
print(cell_obj.value)
print('------') # 列の区切り

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

[テスト.xlsx]

[実行結果]

全てのデータを 列単位 で取得することができました。