OpenPyXL㉔ (レコード単位で入力)

レコード単位で入力

レコード単位で複数のデータを入力するためには、Worksheetオブジェクトの appendメソッド を使います。

まずは1行分のレコードをタプルで定義し、これを1つのリストにまとめます。

そのあとリストに設定した1レコード分のデータ(タプル)をforループで取得し、appendメソッドの引数に設定します。(22~23行目)

[Google Colaboratory]

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
import openpyxl

rows = [
('月', '商品1', '商品2'), # タイトル行
(1, 320, 435), # 12行のレコードデータ
(2, 130, 530),
(3, 440, 60),
(4, 550, 770),
(5, 260, 410),
(6, 370, 640),
(7, 580, 630),
(8, 625, 430),
(9, 720, 230),
(10, 580, 340),
(11, 670, 450),
(12, 605, 755),
]

book = openpyxl.Workbook() # ブックを生成
sheet = book.active # アクティブなシートを取得

for row in rows: # 行数の数だけ繰り返す
sheet.append(row) # ワークシートに追加する

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

[Test.xlsx]

保存したExcelファイルを確認すると、リストに定義したデータがすべて入力されていることを確認できます。

OpenPyXL㉓ (行や列の固定表示)

行や列の固定表示

Excelには、ワークシートのセルをスクロールさせても特定の 行や列を固定で表示 する機能があります。

データが多い場合に見出しの行やれるを固定しておくと、スクロールしても常に見出しが表示されるので作業がしやすくなります。

Worksheetオブジェクトの freeze_panesプロパティ に任意のセル番地を代入するとセルが固定されるようになります。

次のサンプルコードでは、1行目を固定表示 にしています。

[Google Colaboratory]

1
2
3
4
5
6
7
import openpyxl

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

sheet.freeze_panes = 'A2'
book.save('Test.xlsx')

[Test.xlsx]

保存されたExcelファイルを開くと、1行目が 固定表示 になっていることを確認できます。

OpenPyXL㉒ (セル結合の解除)

セル結合の解除

Worksheetオブジェクトの unmerge_cellsメソッド を使うと、結合したセルを 解除 することができます。

引数には結合されたセルの 元のセル範囲 を指定します。

[Google Colaboratory]

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

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

sheet.merge_cells('A1:A2') # セルを結合
sheet['A1'] = '結合1' # セルに入力
book.save('Test1.xlsx')

sheet.unmerge_cells('A1:A2') # 結合を解除
book.save('Test2.xlsx')

[Test1.xlsx] ➡ [Test2.xlsx]

2つのExcelファイルを開くと、結合されたセルが 解除 されていることを確認できます。

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 ・・・ というシート名が設定されます。