Raspberry Pi & Python 開発ブログ ☆彡

Raspberry PiとPythonの基本的な使い方をわかりやすく解説。初心者、入門者必見!!

PythonでExcel(openpyxlモジュール)を操作して、業務自動化

python excel

ブログ管理者のP.Hです!

今回はpythonでExcelを操作する方法を紹介したいと思います。会社等で一番使われているソフトウェアはExcelではないでしょうか。その中身のデータをpythonで読み書きできるようになると、今まで手作業で行っていたことが自動化できるようになります。また、pythonはWebスクレイピングもできるので、エクセルのデータを取得して、それをWeb画面に入力するという作業も自動化できます。pythonはいろいろなモジュールがありますので、それらを組み合わせることで、活用する場面が大きく広がります。

それでは、pythonでExcelを操作する方法を紹介していきます。
※下記の操作はWindowsで行っています。

openpyxlモジュールのインストール

openpyxlというモジュールで、Excelを簡単に操作することができます。下記のコマンドでインストールします。

$ pip install openpyxl

openpyxlモジュールの使い方

pythonでExcelを操作する方法は、手作業でExcelを操作する手順と似ています。以下のような流れになります。

  1. ファイルを開く
  2. シートを選択する
  3. セルを操作する
  4. ファイルを閉じる(保存する)

上記の操作をpythonコードでどのように記載するか説明していきます。

ファイルを開く/閉じる(保存する)

import openpyxl

# Excelを新規に作成する
wb = openpyxl.Workbook()

# 既存のExcelを開く 引数には既存Excelの場所(path)を指定
wb = openpyxl.load_workbook('C:\workspace\Book1.xlsx')

# 既存のExcelを閉じる(保存する)場合 引数には保存する場所(path)を指定
wb.save('C:\workspace\Book1.xlsx')

シートを選択する

# Testという名前でシートを新規に作成する
ws = wb.create_sheet(title="Test")

# Sheet1という名前のシートを選択する
ws = wb['Sheet1']

# アクティブシートを選択する
ws = wb.active

# シート名を変更する
ws.title = "sheetname_test"

セルを操作する

# セルA1の値を取得
print(ws['A1'].value)

# セルA2に値を書き込み
ws['A2'].value = "A2_TEST"

# セルA3に値を書き込み(.valueは書いても書かなくてもどちらでもよい)
ws['A3'] = "A3_TEST"

# セル 行:1 列2(B1)の値を取得
print(ws.cell(1, 2.value)

# セル 行:1 列3(C1)に値を書き込み
ws.cell(1,3).value = "CELL_1_3_TEST"

Excelの読み書きとブラウザ操作を自動化する

Excelをpythonで操作する方法がわかったところで、Excelとブラウザの操作を組み合わせて使う実例を紹介したいと思います。以下のような流れの動作をします。

  1. Excel、ブラウザを開く
  2. Excelから読み込んだデータをもとに、googleで検索を行う
  3. 検索で表示された一番上のページを開いて、URLとタイトルをExcelに書き込む
  4. Excelを保存し、ブラウザを閉じる

上記の2、3を繰り返し行います(セルA1~A3まで)。

ブラウザ操作の準備

seleniumを使って、ブラウザの操作を自動化します。seleniumについては、下記記事で紹介していますので、参考にして頂き、セットアップを行ってください。

www.raspberrypirulo.net

Excelファイルの準備

A1~A3に下記のように記載したエクセルを準備します。C:\workspace\Book1.xlsxにExcelファイルを保存します。

excel for web automation

pythonコードの紹介

コード内にコメントを記載していますので、参考にしてください。

注意事項

  • 必ずExcelファイルを閉じてから、pythonコードを実行してください。
import openpyxl
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

FILEPATH = 'C:\workspace\Book1.xlsx'

# 既存のExcelを開いて、Sheet1を選択
wb = openpyxl.load_workbook(FILEPATH)
ws = wb['Sheet1']

# WebDriverの準備
driver = webdriver.Chrome()
driver.implicitly_wait(10)

# Excelの1列目から3列目まで繰り返す
for i in range(1, 4):

    # googleのページを表示
    driver.get('https://www.google.com/')

    # googleの検索入力ボックスの要素を取得
    element = driver.find_elements_by_xpath("//*[@id='tsf']/div[2]/div[1]/div[1]/div/div[2]/input")[0]

    # 検索入力ボックスにExcelの行:i(1,2,3) 列:1のテキストを入力する
    element.send_keys(ws.cell(i, 1).value)

    # Enterキーを押して、検索する
    element.send_keys(Keys.ENTER)

    # 検索で表示された一番上のページをクリックして、ページ遷移する
    driver.find_elements_by_xpath("//*[@id='rso']/div/div/div[1]/div/div/div[1]/a/h3")[0].click()

    # 表示されたページのURLをExcelの行:i(1,2,3) 列:2に書き込む
    ws.cell(i, 2).value = driver.current_url
    # 表示されたページのタイトルをExcelの行:i(1,2,3) 列:3に書き込む
    ws.cell(i, 3).value = driver.title
    
    # 処理スピードが早いので、分かりやすくするため1秒ウェイト
    time.sleep(1)

# WebDriverのクローズ、終了処理
driver.close()
driver.quit()

# Excelを保存する
wb.save(FILEPATH)

pythonコードの実行結果

上記のサンプルコードを実行すると、下記のようにExcelのB、C列にURLとタイトルが記載されます。

result excel

いかがでしたでしょうか。Excelとpythonで連携ができるようになると、事務作業を自動化することができます。また、Excelでパラメータをリスト化しておいて、ハードウェアをパラメータ通りに制御してテストする、結果をExcelに出力してグラフ化する等、いろいろなことが簡単に自動化することができます。

それほど難易度は高くないと思いますので、業務効率化を行い、皆さん早く帰りましょう。