Python Excelの書き込み、シートの編集方法
はじめに
ここでは、Excelファイルを新規作成してセルに値を書き込む手順や、シートの追加、削除、シート名の変更方法をサンプルコードを用いて説明します。
読み込み手順や必要なモジュールについて
読み込み手順や必要なモジュールについては、こちらの記事で紹介しています。
akuruhinode.hatenablog.com
バージョン情報
本記事のサンプルコード作成時のバージョン情報は以下の通りです。
python : 3.8.3 openpyxl : 3.0.4
基本的な手順
基本的な流れは以下の通りです。この手順では新規Excelファイルを作成しますが、既存のExcelファイルに書き込む場合も手順2以外は同じです。
上記手順のコードは以下の通りです。
import openpyxl # 1.モジュールをインポートする wb = openpyxl.Workbook() # 2.新規Workbookオブジェクトを作成する # デフォルトで'Sheet'というシートが追加されている # print(wb.sheetnames) # ['Sheet'] ws= wb['Sheet'] # 3.操作するシートを指定する ws['A1'] = 'test' # 4.セルに値を書き込む wb.save('sample.xlsx') # 5.Excelファイルを保存する
以下は作成したExcelファイルです。コメントにもある通り、新規Workbookを作成した時点で'Sheet'という名称のシートが追加されています。
シートの編集方法
シートの追加
シートを追加するコードは以下の通りです。ここでは、先ほど作成したExcelファイルにシートを追加してみます。
import openpyxl wb = openpyxl.load_workbook('sample.xlsx') ws = wb.create_sheet() # シートの追加。追加したWorksheetオブジェクトを返す # create_sheet()の引数を指定しないとシート名は自動設定され、既存シートの末尾に追加される # 引数を指定することで追加するインデックス、シート名を指定可能 # ws= wb.create_sheet(index=0, title='Sheet name') ws['A1'] = 'test2' wb.save('sample.xlsx')
シート追加後のExcelファイルは以下の通りです。コメントにもある通り、create_sheet()
の引数を指定していないため'Sheet1'という名前のシートが自動で追加されました。
シートの削除
シートを削除するコードは以下の通りです。ここでは、先ほど作成したファイルから'Sheet'を削除してみます。
シートの削除方法は二通りあります。Workbookオブジェクトのremove()
メソッドを利用するか、del
文を利用します。
import openpyxl wb = openpyxl.load_workbook('sample.xlsx') wb.remove(wb['Sheet']) # 既存シートを削除 # 以下のようにdel文でも削除可能 # del wb['Sheet'] wb.save('sample.xlsx')
以下はシート削除後のExcelファイルです。指定したシートが削除できていることがわかると思います。
シートのコピー
シートをコピーするコードは以下の通りです。
import openpyxl wb = openpyxl.load_workbook('sample.xlsx') # print(wb.sheetnames) # ['Sheet2'] ws = wb.active wb.copy_worksheet(ws) # 'コピー元のシート名 Copy'がシート名に設定される # print(wb.sheetnames) # ['Sheet2', 'Sheet2 Copy'] wb.save('sample.xlsx')
以下はコピー後のExcelファイルです。
シート名の変更
シート名はWorksheetオブジェクトのtitle属性から変更できます。上記に続き、先ほど作成したファイルの'Sheet1'の名称を変更してみます。
import openpyxl wb = openpyxl.load_workbook('sample.xlsx') ws= wb['Sheet1'] sheet.title = 'Sheet2' # シート名の変更 wb.save('sample.xlsx')
以下はシート名変更後のExcelファイルです。
例外発生に注意
禁則文字(シート名に含めることができない文字)を指定した場合、ValueErrorが発生します。
シート名の重複に注意
既存シート名と同じシート名を指定した場合、末尾に自動で数字が追加されます。
import openpyxl wb = openpyxl.Workbook() print(wb.sheetnames) new_sheet_name = wb.active.title # 既存シート名'Sheet'を指定 wb.create_sheet(title=new_sheet_name) print(wb.sheetnames)
['Sheet'] ['Sheet', 'Sheet1']
エラーは発生しないのでプログラムが止まることはないのですが、想定通りの動作にならない可能性があるため注意が必要です。
以下のようなシート名の存在チェックを入れておくと安全でしょう。
import openpyxl wb = openpyxl.Workbook() new_ws_name = wb.active.title #実際には追加するシート名に置き換える if new_ws_name in wb.sheetnames: print('同じシート名が既に存在します') else: wb.create_sheet(title=new_ws_name)