初心者pythonユーザーの備忘録です。ツッコミどころがあるかもしれませんが何卒暖かい目で見守ってください。誤り等あれば教えていただけると幸いです。
この記事が役立つかもしれない状況
- excelの値をコピペする操作をpythonで自動化したい
- プログラムの実行結果をexcelに自動入力したい
- excel上の数字を取ってきて処理を行いたい
- とにかくexcelが操作したい
使用するライブラリ
openpyxl
作業環境
MacBook Air (m1チップ)
os: Monterey ver.12.2.1
python 3.9.7
構文
エクセルのワークブックを読み込む
- 下の例で「エクセルファイル.xlsx」がwbに代入される
- パスは相対パスまたは絶対パス
wb = openpyxl.load_workbook("エクセルファイル.xlsxのパス")
扱うワークシートの指定
- 同一ワークブック内の複数のワークシートのうち、扱うシートを指定する
- 下の例でwbに代入されているワークブック内の「シート1」というワークシートがwsに代入される
ws = wb["シート1"]
セルの指定
- 指定したシート内の指定した番地(座標?)のセルの値を取得する
- 下の例ではwsに代入されているワークシート内の第a行第b列の値が取得される(a,bは自然数)
- エクセルでは列番号がアルファベットだがcolumnには数字を使用する(A列ならcolumn=1)
ws.cell(row=a,column=b).value
同じ構文を使用してセルに数字を書き込んだり書き換えたりすることができる。その場合は処理後のエクセルファイルを新しい名前で保存する。(元のファイル名と同じ名前で保存すれば上書きされる)
ws.cell(row=a,column=b).value=10 #数字を入力
wb.save("新しい名前.xlsx") #保存
その他知っておくと便利な関数
エクセルの列番号のアルファベット表記を数字に変換する
- 例えば、エクセルの列番号「CV」は第何列かを調べたい時は下のようにする
print(openpyxl.utils.column_index_from_string("CV"))
↓
実行結果
>>100
第100列でした。
エクセルの第N列のアルファベット表記を取得する
- 上の逆です
openpyxl.utils.get_column_letter(100)
↓
実行結果
>>CV
第100列は「CV」でした。
参考
udemyのこちらのコースを参考にしています。実践例も交えて詳しく解説されていてわかりやすいのでおすすめです
https://www.udemy.com/course/python-kaizen/