【Python】PythonでExcelファイルの読み書き
Pythonって何でもできるんだなあ、と思います。
今回はPythonを使ってエクセルファイルの読み取り、書き込みなどを行ってみました。
尚、使用しているPythonのバージョンは、Python3.5です!
- Excelファイルの拡張子について
- 1.ライブラリの種類
- インストール
- Excel文書作成
- セルに文字や数字を書く
- セルに文字や数字を書く 2
- シートの名前を取得
- 指定したセルの値を読む
- シート全体のセルを読む
- 参考文献
Excelファイルの拡張子について
Excelファイルには、「.xlsx」と、「.xls」という2種類の拡張子があります。どちらもオフィスのExcelを使って開けるのですが(Office 2016で確認済み)、次のような違いがあります。
・.xlsx = 現在主要なExcelファイル
・.xls = 1997から2003年までの間使われていたExcelファイル
xlsxの方が高圧縮率なので同じ中身でもファイルサイズは小さくなるようです。(ソースはここ)
1.ライブラリの種類
PythonでExcelファイルを扱うことのできるライブラリは、主に以下の3つがあります。
・openpyxl
・xlwt
・xlrd
それぞれのライブラリは、次のようなことができます。
ライブラリ名 | 利用可能な拡張子 | 読み込み | 書き込み |
---|---|---|---|
xlrd | .xlsx、.xls | 〇 | × |
xlwt | .xls | × | 〇 |
openpyxl | .xls、.xlsx | 〇 | 〇 |
よって、僕はxlwt よりもopenpyxl を使うべきだと思います。
一応、両方のインストール方法を書きますが、使用法はopenpyxlのみについて記載しています。
インストール
両方、pip を使ってインストールすることができます。
Excel文書作成
import openpyxl as px book = px.Workbook() book.save('sample.xlsx')
たったこの3行で、sample.xlsxという名前のEXCELファイルを作成することができます。保存場所はPythonファイルとおなじディレクトリです。
book.save(r'C:\Users\Owner\Desktop\sample2.xlsx')
3行目をこのように書くことによって、指定の場所に保存することもできます。
セルに文字や数字を書く
import openpyxl as px wb = px.Workbook() ws = wb.active #Sheetの名前を設定 ws.title = "Sheet_1" # セルに値を入れる ws["A1"] = "ABCDE" # 日本語もOK ws["B1"] = "あいうえお" # 数字もOK ws["A3"] = 13 # 保存 wb.save('sample2.xlsx')
セルに文字や数字を書く 2
もう一つ、このような書き方もあります。for文などを使って、一度に大量のセルにデータを書き込む場合は、こちらの書き方の方がおすすめです。
rowが縦軸の座標(EXCEL表記でいう1、2、3...の部分)を表していて、columnが横軸の座標(EXCEL表記でいうA、B、C...の部分)を表しています。
valueに代入された文字列または数値が、指定のセルに入力されます。
import openpyxl as px wb = px.Workbook() ws = wb.active #Sheetの名前を設定 ws.title = "Sheet_1" # セルに値を入れる # row = 縦軸 (1、2、3...) # column = 横軸 (A、B、C...) ws.cell(row = 1, column = 1, value = 5) ws.cell(row = 2, column = 3, value = 23) ws.cell(row = 4, column = 6, value = "This is F4") # 保存 wb.save('xample2.xlsx')
シートの名前を取得
import openpyxl as px wb = px.load_workbook('example2.xlsx') #シート名を取得 print(wb.sheetnames) #['Sheet_1']
EXCELファイルのセルの値を読むには、まずシートの名前を取得する必要があります。
例えば、Sheet_1という名前のシートを作ったエクセルファイルがあるとします。
上のプログラムを実行すると、
Sheet_1
と、シートの名前が出力されます。
指定したセルの値を読む
import openpyxl as px wb = px.load_workbook('sample2.xlsx') #シート名を取得 print(wb.sheetnames) #['Sheet_1'] sheet = wb['Sheet_1'] #A1セルの値を表示 cell = sheet['A1'] print(cell.value) #ABCDEF print(sheet.cell(column=1, row=1).value) #ABCDEF #何も入力がないセルはNoneになる print(sheet.cell(column=10, row=10).value) #None
このプログラムを実行する前に、
- sample2.xlsxというExcelファイルを作成し、
- Sheet_1という名前で新しくシートを作成し、
- セルA1に何か文字を入力してください。
このような画像になると思います。
また、このExcelファイルを、実行するPythonファイルと同じディレクトリにおいて実行しいてください。
上の写真のような設定で実行した場合、
ABCDEF ABCDEF None
と出力されていればOKです。
シート全体のセルを読む
次に、このようなシートを作成し、次のプログラムを実行してください。
シートの中に書き込まれているセルの値がすべてprintされるはずです。
import openpyxl as px book = px.load_workbook('sample2.xlsx') active_sheet = book.active for column in active_sheet.columns: print('----------------------------') for cell in column: print(cell.value)
実行結果:
---------------------------- A1dayo A2dayo None A4dayo ---------------------------- B1dayo B2dayo None None ---------------------------- C1dayo None None None