靴職人様・法人様向けサービスのページを公開しました

16-19. PythonでExcelの読み込みと書き込み

やること

PythonでExcelの読み込みと書き込みを試してみます。

実行環境

WinPython3.6をおすすめしています。

WinPython - Browse /WinPython_3.6/3.6.7.0 at SourceForge.net
Portable Scientific Python 2/3 32/64bit Distribution for Windows

Google Colaboratoryが利用可能です。

Google Colaboratory

用意したExcel

しねしねこうせんは当時は字数オーバーだったようです。

インストール

必要なパッケージをインストールします。

pip install openpyxl

読み取り(単独セル)

一つのセルを読み取ってみます。

import openpyxl

#Excelファイルを開く
wb = openpyxl.load_workbook('Book1.xlsx', read_only=False, data_only=True)

#シートを開く
ws = wb['Sheet1']

#セル単体の読み取り
A1 = ws['A1'].value
print('A1\n{}'.format(A1))

#Excelファイルを閉じる
wb.close()
A1
インドぞう

ファイルを閉じるのを忘れないでください。

読み取り(横)

A1:D1を読み取ります。

#横の読み取り
for row in ws.iter_rows(min_col=1, min_row=1, max_col=4, max_row=1, values_only=True):
    A1_D1 = list(row)
print('A1_D1\n{}'.format(A1_D1))
A1_D1
['インドぞう', 'でも', 'きぜつ', 'する']

文字列として読み取られています。

読み取り(縦)

A1:A5を読み取ります。

#縦の読み取り
A1_A5 = []
for row in ws.iter_rows(min_col=1, min_row=1, max_col=1, max_row=5, values_only=True):
    A1_A5.append(row[0])
print('A1_A5\n{}'.format(A1_A5))
print(type(A1_A5[2]))
A1_A5
['インドぞう', 'も', 2, '秒で', 'fall down']
<class 'int'>

「2」だけちゃんとint形式で読み込まれました。これは親切ですね。

読み取り(行列)

A1:C4を読み取ります。

#行列として読み取り
A1_C4 = []
for row in ws.iter_rows(min_col=1, min_row=1, max_col=3, max_row=4, values_only=True):
    A1_C4.append(list(row))
print('A1_C4\n{}'.format(A1_C4))
print(type(A1_C4[1][1]))
A1_C4
[['インドぞう', 'でも', 'きぜつ'], ['も', None, None], [2, None, 'わざマシン'], ['秒で', None, 28]]

二次元リストとして読み込めました。空白セルはNoneType(’None’という文字列ではない)になっています。

書き込み

「C6」のように指定する方法と、row, col を指定する方法があります。その後保存することをお忘れなく。

#セルに書き込み(セル記号方式)
ws['C6'] = 'あなをほる'
wb.save('Book2.xlsx')

#セルに書き込み(セル数値方式)
ws.cell(row=4, column=3).value = 4242
wb.save('Book3.xlsx')

まとめ

なお、読み込みと書き込み(上書き保存)は、Excelファイルを開いた状態でプログラムを実行するとエラーになります。Excelは閉じた状態で行いましょう。

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