最近Python熱が急上昇なlisです。
ぼくはAI関連のMastodonインスタンス「aidon」に登録をしています。
DeepLearningは、pythonでの開発が結構活発なようなのです。
この本然り。
で、aidonでこんな本が話題に上がりました。
なんか楽しそう……ということで、ちょっと調べてみたら、「Excelの自動化」の章があるではないですか!
更にそこで使っているのが、「openpyxl」とのこと。
今回は「openpyxl」について調べたので、「これを知ってれば最低限操作できるな」という内容をご紹介していきます!
備忘録がてらに!
インストール
コチラのコマンドを実行します。
pip install openpyxl
importするもの
openpyxlのインポートはこのようにしています。
import openpyxl as px
ファイルを作る・開く・保存
それではまず、ファイルの編集方法について書いていきます。
ファイルの新規作成→保存
ファイルがない場合の処理ですね。
処理部分については、省略します。
import openpyxl as px # ブックの新規作成 wb = px.Workbook() #--- 処理 --- # ファイル保存 wb.save("py.xlsx")
処理内容は見ての通り
- Workbook():新規ブックを取得
- save():指定した名前で保存
超絶に簡単ですね。
ファイルを開く→保存
ファイルが存在する場合です。
こちらも処理部分については、省略します。
import openpyxl as px # ブックを開く wb = px.load_workbook("py.xlsx") #--- 処理 --- # ファイル保存 wb.save("py.xlsx")
既存ファイルの場合も、見ての通り
- load_workbook():既存ブックを取得
- save():指定した名前で保存
と超絶に簡単。
saveは指定名称のようなので、事前に変数に名称をセットしておくなどして、タイプミスを防ぐといいかもしれませんね。
fileName = "py.xlsx"
wb = px.load_workbook(fileName)
wb.save(fileName)
どこに作られる・どこから開くのか?
ファイルの新規作成・開くの方法はわかったものの、このファイルはどこに保存されるのか?
それはコマンド実行時に開かれている場所で、作業が行われます。
例えば、コマンドプロンプトで
cd C:\work python
としてたとします。
見ての通り「C:\work」が開かれていますよね。
ここで「wb.save(“test.xlsx”)」を実行した場合、
「C:\work\test.xlsx」
が作成されます。
コマンドプロンプトを使用せず、その他ツールにてpythonを実行していた場合でも、同様にそのツールの作業フォルダに保存されると思います。
なので
「ファイルはどこに?」
となった時は、まずはそこを調べてあたってみましょう!
シートを作る・選択・リネーム
次にシートを編集する方法についてです。
シートの作成
新しいシートの作成方法です。
import openpyxl as px wb = px.load_workbook("py.xlsx") # ブックを開く # シートを作成 ws = wb.create_sheet() # 名前指定なし ws = wb.create_sheet(title="work") # 名前指定あり # ファイル保存 wb.save("py.xlsx")
これによって、3つのシートが作られた状態となります。
- Sheet:ブック作成時に作られるシート
- Sheet1:名称指定なしで作成したシート
- work:名称指定して作成したシート
シートの選択
前述の「シートの作成」を行った状態で「Sheet, Sheet1, work」の3シートがある状態とします。
import openpyxl as px wb = px.load_workbook("py.xlsx") # ブックを開く # シート名から選択 ws = wb.get_sheet_by_name("work") # 現在選択中のシートを取得 ws = wb.active
「シート名から選択」は、その通り、指定した名称のシートを取得します。
「現在選択中のシートを取得」は、シートの中身を編集するにあたって、シートのオブジェクトが必要となります。
そのとき、「現在選択中のシートのオブジェクトが欲しい」となった場合、これで取得することができます。
シートのリネーム
シートのリネームを行います。
import openpyxl as px wb = px.load_workbook("py.xlsx") # ブックを開く ws = wb.active # 現在選択中のシートを取得 # シートをリネーム ws.title = "data"
対象のシートオブジェクトの名称に対して、値をセットします。
シートの一覧を取得
例として、Sheet1~Sheet4があるとします。
import openpyxl as px wb = px.load_workbook("py.xlsx") # ブックを開く # ワークシート名一覧(リスト) sheetNames = wb.get_sheet_names() # ワークシート名一覧(リスト) print(sheetNames)
するとsheetNameには、このような配列がセットされます。
sheetNames=['Sheet1', 'Sheet2', 'Sheet3', 'Sheet4']
Excelでシート名一覧を取得しようとすると、わざわざVBA書かないといけなかったりするので、プログラムの一環で簡単に実行できるのは便利ですね。
(それ言ったらVBAもプログラムですが)
シートの中身を取得・編集
シートをいじくる方法です。
ここが一番よく使うと思いますが、簡単です。
取得
取得方法はいたって簡単。
セルを指定して、値を取るだけ。
import openpyxl as px wb = px.load_workbook("py.xlsx") # ブックを開く ws = wb.active # 現在選択中のシートを取得 # 値の取得 data = ws["A1"].value
連想配列でセル位置を指定すれば、簡単に値が取得できます。
あくまで文字列なので、ループなどで連続的にセル位置を示す文字列を作り出して、順々にセルの値を取ることも可能です。
こんな感じ。
# セルA1~A5の値を表示 for i in range(5): cell = "A" + str(i + 1) print(ws[cell].value) i += 1
編集
編集も値の取得とほぼ同じです。
import openpyxl as px wb = px.load_workbook("py.xlsx") # ブックを開く ws = wb.active # 現在選択中のシートを取得 # 値のセット ws["A1"].value = "でーた" ws["A2"].value = 1234567890 wb.save("py.xlsx") # ファイル保存
値の取得同様、連想配列で指定したセル位置のvalueに、セットしたいデータを代入します。
たったこれだけ。
まとめ
めっちゃ簡単!なんだこれ!
「pythonごにょごにょした結果をExcelで吐きたい!」
なんてとき、楽勝でできちゃいそうですね。
仕事でもプライベートでも、Excelにデータがまとまっていれば、見やすいし楽チンです。
ちょっとしたことだったら自動化も楽チンでしょうね。
自動化したpythonのコードを、exeとかバッチとかで簡単に実行できるようにしちゃえば、効率化レベルえぐい。
今回試しに触ってみて、ベースとなりそうな箇所をまとめてみました。
が、罫線を引いたり、書式設定したり、セル結合したり、基礎機能だけでもかなりGUI操作と同じようなことができるので、もっとやり込めばもっと強そうですね!