Python で Excel 操作をするモジュールにはさまざまなものがあります。
ここでは openpyxl を導入して Excel ファイルを操作する基本について説明をします。
環境
OS: MaxOS X
Python: 3.9.1
openpyxl: 3.0.5
openpyxl のインストール
openpyxl をインストールするには pip3 コマンドを使用します。
以下は筆者の環境での実行例です。
% pip3 install openpyxl Collecting openpyxl Downloading openpyxl-3.0.5-py2.py3-none-any.whl (242 kB) |████████████████████████████████| 242 kB 5.2 MB/s Collecting et-xmlfile Downloading et_xmlfile-1.0.1.tar.gz (8.4 kB) Collecting jdcal Downloading jdcal-1.4.1-py2.py3-none-any.whl (9.5 kB) Using legacy 'setup.py install' for et-xmlfile, since package 'wheel' is not installed. Installing collected packages: jdcal, et-xmlfile, openpyxl Running setup.py install for et-xmlfile ... done Successfully installed et-xmlfile-1.0.1 jdcal-1.4.1 openpyxl-3.0.5
openpyxl 利用の基本
openpyxl モジュールの基本使用例
openpyxl モジュールを利用するには、インポートをして Workbook のインスタンスを生成するか Excel ファイルを読み込む必要があります。
ここでは、Workbook のインスタンスを生成する基本コードを示します。
Workbook のインスタンスを生成すると、ワークブックが作成され、同時に「Sheet」というシートが1つ追加されます。
import openpyxl # Workbook のインスタンス生成 wb = openpyxl.Workbook()
ワークブック操作の基本
名前を付けてブックを保存する
作成したブックを保存するには、save(path) を使用します。
以下は、ファイル名を Sample.xlsx として保存をする例です。
import openpyxl # Workbook のインスタンス生成 wb = openpyxl.Workbook() # 名前を付けて保存 wb.save("/Users/hiro/Documents/python/Sample.xlsx")
上記のコードを実行すると、Excelファイルが作成されます。
作成された Excel ファイルを開いてみると、前述した通り「Sheet」という名前のシートが1つあることを確認できます。
ワークブックを開く(load_workbook)
既存の Excel ファイルを開くには、load_workbook() を使用します。指定可能な引数を以下の表に示します。load_workbook(filename, read_only=False, keep_vba=KEEP_VBA, data_only=False, keep_links=True)
引数 | 説明 |
---|---|
filename | 必須。オープンする Excel ファイルのパスを指定します。 |
read_only | 読み取り専用でオープンする場合は True を指定します。既定値は False (書き込み可能)です。 |
keep_vba | VBA 要素を保持するかどうかを制御します。既定値は True (VBA を保持する)です。 |
data_only | 数式を含むセルに数式を含めるか、Excelが最後にシートを読み取ったときに保存された値を含めるかを制御します。既定値は True (セルに数式を含める)です。 |
keep_links | ブック内の外部リンクを保持するかどうかを制御します。既定値は True (ファイブリンクを保持する)です。 |
ワークブックを開くための基本コードを以下に示します。
4行目で load_workbook を使用してファイルを開いた後は、変数 wb を使用してブックの操作を行ます。
import openpyxl # Sample.xlsx を開く wb = openpyxl.load_workbook("/Users/hiro/Documents/python/Sample.xlsx")
シート操作の基本
シートの追加(create_sheet(title=None, index=None))
新しくシートを追加するには、create_sheet(title=None, index=None) を使用します。
引数の title は、作成するシートに付けるシート名を指定します。省略した場合は、自動で「Sheet1」「Sheet2」のように名前が付けられます。
引数 index には、追加するシートの挿入位置を指定します。挿入位置は 0 から(0 が先頭)指定することができます。
以下は、2つのシートを追加する例です。
import openpyxl wb = openpyxl.Workbook() # 先頭に「Sample1」というシートを追加 wb.create_sheet(title='Sample1', index=0) # 末尾にシートを追加する。シート名は自動で決定される wb.create_sheet() wb.save("/Users/hiro/Documents/python/Sample.xlsx")
6行目は、シート名に「Sample1」挿入位置を先頭にしてシートを追加しています。
8行目は、シート名と挿入位置を省略して、シートの追加をしています。シート名は自動で Sheet1 となり、末尾に追加されます。
以下に実行例を示します。
指定したシート「Sample1」と自動で追加したシート「Sheet1」を確認できます。シート名「Sheet」はブック作成時に自動的に追加されるシートです。
インデックスを指定してシートを削除する
インデックスを指定してシートを削除するには remove メソッドを使用します。
以下の例に示すように、removeメソッドの引数に workbook の worksheets オブジェクトを指定します。
※ remove メソッドを実行すると、メモリ内でのシート削除が行われます。よって save() メソッドを実行しない限り、ファイルには反映されないことに注意してください。
import openpyxl xlsfile = "/Users/hiro/Documents/python/Sample.xlsx" wb = openpyxl.load_workbook(xlsfile) # 先頭のシートを削除 wb.remove(wb.worksheets[0]) # 末尾のシートを削除 wb.remove(wb.worksheets[-1]) # 上書き保存してファイルに反映 wb.save(xlsfile)
シート名を指定してシートを削除する
シート名を指定してシートを削除する場合も、前述同様 remove メソッドを指定します。
ただし、引数には wb[‘シート名’] のように、workbook オブジェクトにシート名を指定します。
import openpyxl xlsfile = "/Users/hiro/Documents/python/Sample.xlsx" wb = openpyxl.load_workbook(xlsfile) # シート「Sample1」を削除 wb.remove(wb['Sample1']) # 上書き保存してファイルに反映 wb.save(xlsfile)
ブック内の全てのシート名を取得する
ブックに含まれているシートは、sheetnames オブジェクトに格納されています。
sheetnames オブジェクトには、すべてのシートの情報を持っています
全てのシート名を取得したい場合は、以下のように for 文を使用して、sheetnames が持つ title() メソッドを実行して取得することができます。
import openpyxl wb = openpyxl.load_workbook("/Users/hiro/Documents/python/Sample.xlsx") for sheet in wb.sheetnames: print(sheet.title())
インデックスを指定してシート名を取得する
worksheets[インデックス].title を使用することで、インデックスを指定してシート名を取得することができます。インデックス番号に「0」を指定すると先頭のシート名。インデックス番号に「-1」を指定することで末尾のシート名を取得することができます。
import openpyxl wb = openpyxl.load_workbook("/Users/hiro/Documents/python/Sample.xlsx") # 先頭のシート名を取得 print(wb.worksheets[0].title) # 末尾のシート名を取得 print(wb.worksheets[-1].title)
セル操作の基本
セル操作の基本を学ぶ前に、サンプルファイルを入手しておきます。
以下は、総務省統計局が提供している「人口の推移と将来人口(エクセル:22KB)」データです。
1つのセルデータを取得する
前述したファイルで平成22年の北海道の人口と青森県の人口を取得する例を示します。
Excel のセルは A1形式と R1C1形式での指定方法がありますが、openpyxl も同様に指定することができます。
平成22年の北海道の人口は、2列目10行目にあります。「2列目」と「10行目」という情報でセルの値を取得するには cells(行番号, 列番号).value を使用します(10行目)。
平成22年の青森県の人口は、B11 にあります。この「B11」という情報でセルの値を取得するには ワークシートオブジェクト[‘A1形式‘].value を使用します(14行目)。
import openpyxl xlsfile = "/Users/hiro/Documents/python/n200200200.xlsx" wb = openpyxl.load_workbook(xlsfile) # ワークシートの情報を取得 sheet = wb.worksheets[0] # 北海道の人口取得 num1 = sheet.cell(10,2).value print('北海道の人口={}人'.format(num1)) # 青森県の人口取得 num2 = sheet['B11'].value print('青森県の人口={}人'.format(num2))
1行分のデータを取得する
1行分のデータを取得するには、worksheets オブジェクトを使用します。
以下の例では、1列目のデータを全て取得して表示しています。
7行目でワークシートの情報を取得後、 9行目で ws[1] のようにして行データを取得しています。
import openpyxl xlsfile = "/Users/hiro/Documents/python/n200200200.xlsx" wb = openpyxl.load_workbook(xlsfile) # ワークシートの情報を取得 ws = wb.worksheets[0] # 9行目のデータを全て取得する for row in ws[9]: print(row.value)
1列分のデータを取得する
1列分のデータを取得するには、worksheets オブジェクトを使用します。
以下の例では、A列のデータを全て取得して表示しています。
7行目でワークシートの情報を取得後、 9行目で ws[‘A’] のようにして列データを取得しています。
import openpyxl xlsfile = "/Users/hiro/Documents/python/n200200200.xlsx" wb = openpyxl.load_workbook(xlsfile) # ワークシートの情報を取得 ws = wb.worksheets[0] # A列のデータを全て取得する for cell in ws['A']: print(cell.value)
セルに値を書き込む
セルに値を書き込むには、worksheets オブジェクトを使用します。
以下の例では、7〜10行目でセルに値を書き込んでいます。
1行1列目(A1)に「Hello」、1行2列目(B1)に「World」、2行1列目(A2)に「7」、2行2列目(B2)も
import openpyxl # Workbook のインスタンス生成 wb = openpyxl.Workbook() ws = wb.active ws.cell(1,1).value = 'Hello' ws['B1'].value = 'World' ws.cell(2,1).value = 7 ws['B2'].value = 3.14 wb.save('Sample.xlsx')
コメント