今回はPythonを利用して、Excelを自動操縦する方法を紹介する。PythonからExcelを自動操縦できれば、事務作業の効率化に大いに役立つだろう。その一例としてExcelファイルをPDFに変換するプログラムを紹介する。
VBAよりもPythonで自動化しよう
ところで、マルチプラットフォーム対応のプログラミング言語Pythonだが今回はWindows専用だ。というのも、今回はWindowsに備わっているCOM(ActiveX)機能を使うからだ。もともとExcelには処理を自動化するのためにVBAというマクロ機能が備わっているが、外部のプログラミング言語から操作できるよう考慮されている。そのため、このCOM機能を利用することでPythonからもExcelを自動操縦できるようになっている。VBAよりも柔軟で先進的なライブラリを多数備えるPythonを使うなら、より楽しく作業を自動化できることだろう。
なお、Excelを操作するのではなく、Excelファイルの読み書きを行うだけであれば、本連載の36回目でopenpyxlライブラリの使い方を紹介した。今回は、直接PythonからExcelを操作するので、Excelファイルを操作をするのとは基本的に違う。ただし、openpyxlライブラリを使う場合、Excelがインストールされている必要がなく、macOSやLinuxでも利用できる。ただし、Excelの全ての機能が使える訳ではないため、それぞれの方法に一長一短がある。
pywin32をインストールしよう
前回、WindowsにPythonをインストールする方法を紹介した。PythonでExcelを自動操縦するためにCOMの機能を利用するには、WindowsにPythonをインストールした上で、さらに「pywin32」というライブラリをインストールする必要がある。 スタートメニューから「Windows システム ツール > コマンドプロンプト」を起動しよう。そして、以下のコマンドを入力して[Enter]キーを押そう。
pip install pywin32
もし、既にインストールされている場合、以下のように『Requirement already satisfied(要件は満たされています)』と表示される。
なお、以前から本連載の読者であれば、こちら(連載14回目)を参考にしてAnacondaをインストールしていることだろう。その場合、Windowsメニューから「Anaconda3 > Anaconda Prompt」を選んで、上記のpipコマンドを実行しよう。
以上で、ExcelをPythonから操作する準備は完了だ。
Excelを起動して挨拶を書き込んでみよう
それでは、一番簡単なプログラムを作ってみよう。Excelを起動させて、左上のセルB2に「こんにちは」と書き込んでみよう。前回の手順を参考にしてIDLEを起動して以下のプログラムを一行ずつ入力してみよう。
# win32com ライブラリを読み込み
import win32com.client
# Excelを起動する
app = win32com.client.Dispatch("Excel.Application")
app.Visible = True
# Excelに新規ワークブックを追加
book = app.Workbooks.Add()
# アクティブなシートを得る
sheet = book.ActiveSheet
# シートに値を書き込む
sheet.Range("B2").Value = "こんにちは"
すると、Excelが起動しシートに値が書き込まれる。
さらに、以下のプログラムを入力すると、Excelが終了する。
app.DisplayAlerts = False
app.Quit()
Excel VBAに詳しい人であれば、VBAのコードとPythonのコードがかなり似通っていることに気づくだろう。Pythonのコードへの置き換えがあるので、完全に一致というわけではないが、ほぼ同じメソッドを利用することができる。Excelを起動するコードこそ違うが、その後はほとんどだ。そのため、VBAのサイトを参考にして、Pythonのプログラムを作ることができる。
なお、当然ながら、このプログラムを動かすには、WindowsにExcelがインストールされている必要がある。
既存のExcelファイルを開いてPDFで保存する方法
それでは、次に既存のExcelファイルを開いて、PDFファイルで保存するプログラムを作ってみよう。IDLEを起動したら、メニューから[File > New File]をクリックし、以下のプログラムを記述しよう。そして「topdf.py」という名前で保存する。
# ライブラリを読み込み
import win32com.client
import os
# 読み込み元ファイルと書き込み先を指定する
base = os.path.dirname(__file__)
input_file = os.path.join(base, "test.xlsx")
output_file = os.path.join(base, "output.pdf")
# Excelを起動する
app = win32com.client.Dispatch("Excel.Application")
app.Visible = True
app.DisplayAlerts = False
# Excelでワークブックを読み込む
book = app.Workbooks.Open(input_file)
# PDF形式で保存
xlTypePDF = 0
book.ExportAsFixedFormat(xlTypePDF, output_file)
# Excelを終了
app.Quit()
それから、適当なExcelファイルをtest.xlsxという名前でプログラムと同じフォルダに配置したらプログラムを実行してみよう。うまく実行できると、Excelファイルを読み込んでPDFファイルを出力する。
まとめ
以上、今回は、pywin32パッケージをインストールし、ExcelをPythonから操作する方法を紹介した。WindowsのCOM機能を利用するため、動作はWindows限定となるがVBAと同等の機能を利用できる。Pythonの豊富なライブラリを利用しつつExcelが操作できるのでとても便利だ。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。