ブログ管理者のP.Hです!
今回はpythonでExcelを操作する方法を紹介したいと思います。会社等で一番使われているソフトウェアはExcelではないでしょうか。その中身のデータをpythonで読み書きできるようになると、今まで手作業で行っていたことが自動化できるようになります。また、pythonはWebスクレイピングもできるので、エクセルのデータを取得して、それをWeb画面に入力するという作業も自動化できます。pythonはいろいろなモジュールがありますので、それらを組み合わせることで、活用する場面が大きく広がります。
それでは、pythonでExcelを操作する方法を紹介していきます。
※下記の操作はWindowsで行っています。
openpyxlモジュールのインストール
openpyxlというモジュールで、Excelを簡単に操作することができます。下記のコマンドでインストールします。
$ pip install openpyxl
openpyxlモジュールの使い方
pythonでExcelを操作する方法は、手作業でExcelを操作する手順と似ています。以下のような流れになります。
- ファイルを開く
- シートを選択する
- セルを操作する
- ファイルを閉じる(保存する)
上記の操作を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とブラウザの操作を組み合わせて使う実例を紹介したいと思います。以下のような流れの動作をします。
- Excel、ブラウザを開く
- Excelから読み込んだデータをもとに、googleで検索を行う
- 検索で表示された一番上のページを開いて、URLとタイトルをExcelに書き込む
- Excelを保存し、ブラウザを閉じる
上記の2、3を繰り返し行います(セルA1~A3まで)。
ブラウザ操作の準備
seleniumを使って、ブラウザの操作を自動化します。seleniumについては、下記記事で紹介していますので、参考にして頂き、セットアップを行ってください。
Excelファイルの準備
A1~A3に下記のように記載したエクセルを準備します。C:\workspace\Book1.xlsx
にExcelファイルを保存します。
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とタイトルが記載されます。
いかがでしたでしょうか。Excelとpythonで連携ができるようになると、事務作業を自動化することができます。また、Excelでパラメータをリスト化しておいて、ハードウェアをパラメータ通りに制御してテストする、結果をExcelに出力してグラフ化する等、いろいろなことが簡単に自動化することができます。
それほど難易度は高くないと思いますので、業務効率化を行い、皆さん早く帰りましょう。