【Python】エクセルをPDFに変換する方法(win32com)

時計 2020.10.23 / 時計

【Python】エクセルをPDFに変換する方法(win32com)

ビジネスの現場においてエクセルを使っていない会社はほとんどないでしょう。

そのエクセルをPDFに変換する場合、多くの人はExcelに存在する機能(ファイル→エクスポート→PDF/XPS ドキュメントの作成)を使用していると思います。

1つのエクセルをPDFに変換するだけでも、何度もクリック動作を必要とします。
そしてもし対象のエクセルが大量にある場合、膨大な時間を有します。

Pythonを使ってPDF変換処理を自動化することができれば、多くの時間を削減することができないでしょうか。

そこで本記事ではPythonでエクセルをPDFに変換する方法を解説していきます。

エクセルのPDF変換にはwin32comというモジュールを使用します。

win32comについて

Ptyhonでエクセルを操作する場合、win32comやxlwings、openpyxlなどのパッケージが思い浮かびます。
今回解説している「エクセルをPDFに変換する方法」では、win32comを使用します。

win32comはWindowsのActiveX/COMを利用してエクセル操作を行います。
そのためOSはWindowsに限定されますが、エクセルを直に操作できるため、マクロでできることはほとんどwin32comで実現することができます。

openpyxlなどでは実現できなかった細かな操作や、今回紹介しているPDFへの変換、印刷処理などがwin32comではできるようになります。

win32comは標準モジュールではないため、pipコマンドでpywin32というライブラリをインストールする必要があります。

pip install pywin32

pyファイル内では以下のようにwin32comモジュールをインポートします。

import win32com.client

win32comの仕様上の注意点としては、すでに説明していますが、OSがWindowsであり、かつExcelがインストールされている必要があります。

エクセルをPDFに変換する流れ

以下にエクセルをPDFに変換する際のプログラムの一連の流れを記載します。

  1. エクセルを起動する
  2. 対象のエクセルを開く
  3. シートを選択する
  4. 対象のエクセルをPDFに変換する
  5. エクセルを終了する

また今回作成するサンプルプログラムを以下に記します。

import win32com.client    # win32comのインポート

excel_path = パスを指定する
pdf_path = パスを指定する

excel = win32com.client.Dispatch("Excel.Application")    # Excelの起動
file = excel.Workbooks.Open(excel_path)    # Excelファイルを開く
file.WorkSheets("OFFICE54").Activate()    # Sheetをシート名でアクティベイト
file.ActiveSheet.ExportAsFixedFormat(0, pdf_path)    # PDFに変換
file.Close()    # 開いたエクセルを閉じる
excel.Quit()    # Excelを終了

ぜひ自端末で実行して、きちんと動作していることを確認してください。

エクセルをPDFに変換する方法(win32com)

エクセルを起動する

まずはExcelソフトを起動します。

excel = win32com.client.Dispatch("Excel.Application")

対象のエクセルを開く

Excelを起動したら、次に対象のエクセルファイルを開きます。
パスは絶対パスで記述します。

file = excel.Workbooks.Open('絶対パス')

シートを選択する

次に開いたエクセルから対象のシートを選択します。
先頭のシートであれば、ここでインデックスを指定する必要はないです。

開いたエクセルファイルに対してWorkSheets()メソッドを使用し、引数にはシートのインデックスまたはシート名を入れます。

file.WorkSheets(インデックスまたはシート名).Activate()

対象のエクセルをPDFに変換する

次に開いたエクセルシートをPDFに変換します。
ここでは第一引数に0を指定してPDFに変換します。

file.ActiveSheet.ExportAsFixedFormat(0, 'PDFファイルの保存先の絶対パス')

エクセルを終了する

最後に起動したExcelを終了して終わります。

file.Close()
app.Quit()

まとめ

PythonでエクセルをPDFに変換する方法はいかがでしたでしょうか?

私は仕事でこの方法を応用して、エクセルをPDFにして、それを特定のPDF上に張り付けるプログラムを作成して、業務の効率化を測りました。

このようにエクセルをPDFにすることは意外に業務効率を改善することに使えることがあります。

ぜひ身近な仕事が自動化できるようにならないか、ぜひこの機会に考えてみてはいかがでしょうか。