【まとめ】Pythonのopenpyxlで行うExcelの基本操作

Pythonの勉強を再開し、Excelを操作して自動化させるべく色々と進めています。

使用本は、『退屈なことはPythonにやらせよう〜』、私が購入したのは初版第1刷で2017年発刊分です。
Githubの方にある正誤表の中身を本に書き写しておきます。

この本の12章がExcelに関することで、ここを中心に、わからない場合は他の章を参照して進めています。



私の環境は、Ubuntuの公式Docker ImageにPythonやopenpyxl、JupyterLabをインストールして、Pythonの結果が随時確認できるようにしています。詳細は、拙ブログ『【まとめ】MacでPythonのGUIライブラリが使えるDockerの設定方法』にまとめています。

  • マシン:MacBook Pro
  • OS:macOS Catalina(10.15.7)
  • 仮想環境:Docker Desktop
  • エディタ:JupyterLab
  • Python:Ver.3.8.2
  • openpyxl:Ver.3.0.5


Excelを操作するといいながら、以下の画像はGoogleスプレッドシートです。ファイルは拡張子「.xlsx」で保存すれば、Excelが無くてもPythonで操作が可能で、GoogleスプレッドシートでもOpenOfficeで開きますので確認も可能です。



そんな中、Excelを操作する基本的なコードを備忘録としてまとめました。

#openpyxlモジュールを使用する
import openpyxl

#新規Excelファイルを開く
wb=openpyxl.Workbook()

#このExcelを保存する
wb.save('example_copy.xlsx')
#新規ファイルのシート名を確認する
wb.sheetnames
#シート名は「Sheet」の1シートのみある状態

#シート「Sheet」を指定する
wb['Sheet']
#シート名を取得する
wb['Sheet'].title
#シート「Sheet」のシート名を変更する
wb['Sheet'].title='Example 1'
#シート名を確認する
wb.sheetnames
#シート名は「Example 1」に変更された
#シートを追加する
wb.create_sheet()
#シート名を確認する
wb.sheetnames
#シート「Sheet」が、「Example 1」の次に追加された
#シート名(Example 3)とシートの順番(3番目、'Sheet'の次)を指定してシートを追加する
#シートの順番は0が1番目、1が2番目、2が3番目となる
wb.create_sheet(title='Example 3',index=2)
#シート名を確認する
wb.sheetnames
#シート「Example 3」が、「Sheet」の次に追加された
#シート「Sheet」のシート名を変更する
wb['Sheet'].title='Example 2'
#シート名を確認する
wb.sheetnames
#シート名は「Example 2」に変更された
#シートは順に、「'Example 1', 'Example 2', 'Example 3'」となっているはず
#シート「Example 3」を削除する その1
wb.remove(wb['Example 3'])
#シート名を確認する
wb.sheetnames
#シートは順に、「'Example 1', 'Example 2'」となっているはず

#シート「Example 3」を削除する その2
del wb['Example 3']
#シート名を確認する
wb.sheetnames
#シートは順に、「'Example 1', 'Example 2'」となっているはず
#アクティブなシートを確認する
wb.active
#大体順序が早いシートになる。今は「'Example 1'」となる。

#セルを特定する
wb['Example 1']['A1']
#「Example 1」シートの「A1」セルを指定した

#セル「A1」に値を書き込む
wb['Example 1']['A1']='This is a pen.'
#セル「A1」の値を見てみる
wb['Example 1']['A1'].value
#「This is a pen.」と出るはず
#セル「A1」の値を上書きする
wb['Example 1']['A1']='Hello'
#セル「A1」の値を見てみる
wb['Example 1']['A1'].value
#「Hello」に変わっているはず
#セル「A1」の行番号
wb['Example 1']['A1'].row
#行番号は1

#セル「A1」の列番号
wb['Example 1']['A1'].column
#列番号は1

#セル「A1」の列番号を文字に変換する
get_column_letter(wb['Example 1']['A1'].column)
#列文字「A」

#セル「A1」の列文字を番号に変換する
column_index_from_string('A')
#列番号「1」

#セル「A1」のセル名
wb['Example 1']['A1'].coordinate
#セル名「A1」

#セルを行番号と列番号で指定
wb['Example 1'].cell(row=1,column=1)
#「Example 1」シートの「A1」セルが指定された

#セルを行番号と列番号で指定してセルの値を見る
wb['Example 1'].cell(row=1,column=1).value
#「Example 1」シートの「A1」セルの値「Hello」と出る

#このExcelを保存する
wb.save('example_copy.xlsx')
#「'Example 1', 'Example 2'」の2つのシートがあり、
#シート「Example 1」の「A1」セルに「Hello」と入力された
#「example_copy.xlsx」が保存された


その他の操作方法については、

に詳しいので、ぜひご覧ください。










Comments

よく読まれている記事

CSSボタンでテキストを天地中央に揃えるとき、なぜボタン高と行高を一緒にするのか

FullCalendarの導入からカレンダー毎の色指定まで

FacebookページのフィードURLを取得しウォールを自サイトに表示

Bloggerテンプレートのちょっとしたカスタマイズのまとめ

document.write() 複数行の記述方法