lisz-works

技術系だけど関係ないこと多い系ブログ

openpyxlでExcel操作!最低限必要そうなのまとめてみた - PythonでExcelを操作しちゃおう!

【スポンサーリンク】

Python ロゴ

最近Python熱が急上昇なlisです。

ぼくはAI関連のMastodonインスタンス「aidon」に登録をしています。
DeepLearningは、pythonでの開発が結構活発なようなのです。

この本然り。

ゼロから作るDeep Learningを買ってみた!1-2章を読んだ感想とか! - lisz-works

で、aidonでこんな本が話題に上がりました。

なんか楽しそう……ということで、ちょっと調べてみたら、「Excelの自動化」の章があるではないですか!

更にそこで使っているのが、「openpyxl」とのこと。

今回は「openpyxl」について調べたので、「これを知ってれば最低限操作できるな」という内容をご紹介していきます!

備忘録がてらに!

インストール

コチラのコマンドを実行します。

pip install openpyxl

importするもの

openpyxlのインポートはこのようにしています。

import openpyxl as px

ファイルを作る・開く・保存

それではまず、ファイルの編集方法について書いていきます。

ファイルの新規作成→保存

ファイルがない場合の処理ですね。
処理部分については、省略します。

import openpyxl as px

# ブックの新規作成
wb = px.Workbook()

#--- 処理 ---

# ファイル保存
wb.save("py.xlsx")

処理内容は見ての通り

  1. Workbook():新規ブックを取得
  2. save():指定した名前で保存

超絶に簡単ですね。

ファイルを開く→保存

ファイルが存在する場合です。
こちらも処理部分については、省略します。

import openpyxl as px

# ブックを開く
wb = px.load_workbook("py.xlsx")

#--- 処理 ---

# ファイル保存
wb.save("py.xlsx")

既存ファイルの場合も、見ての通り

  1. load_workbook():既存ブックを取得
  2. 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つのシートが作られた状態となります。

  1. Sheet:ブック作成時に作られるシート
  2. Sheet1:名称指定なしで作成したシート
  3. work:名称指定して作成したシート

シート3つ

シートの選択

前述の「シートの作成」を行った状態で「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操作と同じようなことができるので、もっとやり込めばもっと強そうですね!