やること
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 Colab
用意した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は閉じた状態で行いましょう。