Python – openpyxlによるExcelファイル操作(読み取り・書き込み)

目的

Python – openpyxlを用いてExcelファイルに記述されているデータの読み取り、Excelファイルへの書き込みを行うことを目的とします。

環境構築

今回はExcelファイルの操作を行うのに外部ライブラリopenpyxlを使用します。

pipを用いることができる環境の方は以下のコマンドを用いてライブラリのインストールを行ってください。

pip install openpyxl

学校や企業などセキュリティの影響でpipを用いることができない環境の場合は「pipを使用することができない場所でPythonライブラリをインストールする」を参考にライブラリのインストールを行ってください。

Excelファイルの読み込み

この項では以下のような3行3列のExcelファイル(excel1.xlsx)に記述されたデータの読み込みを行って行きます。

以下のサンプルコードexcel1.pyはexcel1.xlsxというExcelファイルを開き、2行A列目の値と3行B列目の値を読み取り出力するというものです。

import openpyxl

book = openpyxl.load_workbook('excel1.xlsx')
sheet = book.worksheets[0]

print("2行A列の値は:",sheet.cell(column=1,row=2).value)
print("3行B列の値は:",sheet.cell(column=2,row=3).value)

まず初めに、openpyxl.load_workbook()で引数に渡した名称のExcelファイルを開きます。その後book.worksheets[0]でそのExcelファイルの何番目のシートを読み取るかの指定を行います。

今回は初期状態、Sheet1に記載されているデータを読み取りたいので、0番目を指定しています。

セルに書き込まれたデータを読み取るにはsheet.cell(column=1,row=2).valueのような形でcolumn=とrow=を用いて、読み取りたいセルの行と列を指定してあげます。行と列の数字は0からではなく、1から始まるので注意してください。

このexcel1.pyを実行すると以下のような結果が出力され、2行A列の値”4″と、3行B列の値”8″を読み取ることに成功していることが確認できるはずです。

>python excel1.py
2行A列の値は: 4
3行B列の値は: 8

また任意のセル一つを読み取るのではなく、A列のデータを読み取り、リストに格納したいといった場合は以下のサンプルコードexcel2.pyのような方法を用います。

import openpyxl

book = openpyxl.load_workbook('excel1.xlsx')
sheet = book.worksheets[0]

A_data = []

for cell in sheet['A']:
    A_data.append(cell.value)

print(sheet['A'])
print(A_data)

このサンプルコードではfor文を用いてA行の値を一つずつ読み取り、それをA_dataというリストに格納していっています。

このコードの実行結果は以下のようになります。

>python excel2.py
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>, <Cell 'Sheet1'.A3>)
[1, 4, 7]

Excelファイルへの書き込み

この項では「Excelファイルの読み込み」と同じ3行3列のExcelファイルexcel1.xlsxに対してデータの書き込みを行って行きます。

セルへの書き込みは、先ほどのセルからの読み取りとほぼ同じ方法で可能となります。

sheet.cell(column=1,row=4,value=10)

上記コードのように、sheet.cell()の引数に書き込みたいセルの行と列、書き込む値(value=)を与えてあげることで書き込むことができます。

この方法を用いてexcel1.xlsxのA列4行目に新たな値”10″を書き込んでいるのが、下のexcel3.pyです。

import openpyxl

book = openpyxl.load_workbook('excel1.xlsx')
sheet = book.worksheets[0]

print([cell.value for cell in sheet['A']])

sheet.cell(column=1,row=4,value=10)

print([cell.value for cell in sheet['A']])
book.save('excel1.xlsx')

このサンプルコードでは、まずExcelファイルとシートを読み込み、新たな値を書き込む前のA列の値をリストに格納して出力しています。その後A列4行目に10を書き込み、書き込み後のA列の値を出力しています。

結果は以下のようになり、新たな値の書き込みに成功していることが確認できるはずです。また、最後の行に記載したbook.save(‘excel1.xlsx’)を用いてファイルの保存を行わないと、Excelファイルの更新が行われないのでご注意ください。

>python excel3.py
[1, 4, 7]
[1, 4, 7, 10]

コメント

タイトルとURLをコピーしました