ExcelのPDF化はExcelの「ファイル」タブからワンクリックで完了しますが、ファイルが沢山あると単純作業でも時間がかかりますよね。大量のPDFをExcelに変換する方法としてはVBAやマクロを使うことが一般的です。でももしあなたのパソコンにPythonがインストールされているなら、たった15行のコードで自動PDF化が出来ちゃいます!
今回は、Pythonライブラリ“pywin32”を使い、指定したフォルダ内にあるExcelファイル全てをPDFファイルに変換するプログラムを作成する方法を紹介します。
“pywin32(win32com)”でExcelをPDF化する方法
pip install pywin32
今回使用するのはPywin32(win32com)というPythonのライブラリです。Pywin32はPythonからWin32 APIへアクセスするためのライブラリで、PythonからExcelの処理を実行することができます。
他にもWordなどOfficeソフトを扱えるライブラリです。
例えばセル内に文字を記入し、記入が完了したらファイルを閉じるようなプログラムを作ることができます。
全体のコードの紹介
import os
import win32com.client
excel = win32com.client.Dispatch("Excel.Application")
path = r'C:/abc/def/ghi'
inputDir = path + r'\Excel'
outputDir = path + r'\PDF'
for f in os.listdir(inputDir):
base, ext = os.path.splitext(f)
if ext == '.xlsx' and '~$' not in base:
wb = excel.Workbooks.Open(os.path.join(inputDir,f))
wb.WorkSheets(1).Select()
wb.ActiveSheet.ExportAsFixedFormat(0, outputDir + '/' + base + '.pdf')
wb.Close()
5行目のパスを実行する環境に合わせて実行するだけで、ExcelファイルをPDFに変換できます。
それぞれのコードの解説
import os
import win32com.client
1,2行目で今回使用するライブラリのインポートを行います。
excel = win32com.client.Dispatch("Excel.Application")
4行目で操作したいソフトを指定(今回はExcel)。
path = r'C:/abc/def/ghi'
inputDir = path + r'\Excel'
outputDir = path + r'\PDF'
5行目でフォルダを指定、6,7行目でExcelフォルダとPDFフォルダに分けます。
for f in os.listdir(inputDir):
base, ext = os.path.splitext(f)
9行目のos.listdir(inputDir)でinputDirに格納されているファイルをos.listdirで全て取得し繰り返し処理を行い、10行目でos.path.splitextによりbase, extにそれぞれファイル名と拡張子を代入します。
if ext == '.xlsx' and '~$' not in base:
wb = excel.Workbooks.Open(os.path.join(inputDir,f))
wb.WorkSheets(1).Select()
wb.ActiveSheet.ExportAsFixedFormat(0, outputDir + '/' + base + '.pdf')
wb.Close()
11行目以降で拡張子が.xlsx、つまりExcelファイルのときに変換処理を行います。なお、Excelでは先頭に~$という名前が付けられたファイルが一時ファイルとして作成されている可能性があるので、その一時ファイルを除くために'~$' not in baseという条件文も追加しています。
12行目のos.path.joinでinputDirのパスとfのファイル名を結合してフルパスにし、excel.Workbooks.OpenでExcelファイルを開きます。
13行目のWorkSheets(1).Select()によりシート1を選択し、14行目でExportAsFixedFormat(0)によりPDFに変換します。
第二引数には保存先のファイルパスを指定します。ここでは、Excelファイルと同一フォルダに「ファイル名.pdf」という名前で保存するコードになっています。
15行目でエクセルファイルを閉じて完了です。
実際にExcelをPDF化してみた
まず初めに準備したExcelファイルはこちら。今回は業務でよく使いそうな4種類のファイルを変換してみます。
自動生成したPDFファイルがこちら。
PDFを確認すると、Excelで表示されるレイアウトでそのままPDFに変換されます。
PDFからExcelに変換する方法は?
pip install tabula-py
逆に、PDFをExcelに自動変換することは出来るのでしょうか?
ここではtabulaというライブラリを使用します。tabulaはPDFに記載されている表を抽出することができるライブラリです。なおこれはJavaライブラリなので、PDFのデータを抽出するには事前にJavaのインストールが必要です。
from tabula import read_pdf
import pandas as pd
pdflDir = r'C:/abc/def/ghi'/顧客管理.pdf'
excelDir = r'C:/abc/def/ghi'/顧客管理.xlsx'
pdf = read_pdf(pdflDir, pages=1)
for pdf1 in pdf:
pdf1.to_excel(excelDir)
7行目のread_pdfでPDFのデータを抽出し、to_excelで書き込みを行います。
Excel自動化・効率化を実現するPythonライブラリ
今回はPywin32でExcelァイルをPDF化させましたが、他にもExcelファイルを操作する機能(ライブラリ)があるので紹介します。
openpyxl
openpyxlはExcelファイルの読み書きだけではなく、書式設定など他の設定もできます。Excelの基本的な操作を自動化する際によく利用されています。PythonでExcelを操作する際に使用する最もオーソドックスなライブラリであり、ネット上でも情報が豊富なため、初心者には最適かも知れません。
openpyxlの使い方はこちらの記事でじっくり解説しています!
pandas
pandasは基本的にデータを扱う際に使用されるライブラリですが、pandasを使用することで様々な型のデータに対応したり、機能が豊富です。データ分析で使われることが多いとされています。
直接Excelを触ることはありませんが、Excelの書き込みや読み取りの際に併用されることがよくあるライブラリです。こちらも解説記事が豊富な有名ライブラリです。
pandasはこちらの記事で解説しています!
xlwings
xlwingsはExcelを開きながらPythonを実行できるライブラリです。
新規作成→保存→閉じるまでの一連の流れを作成したり、データの書き込みや読み込みができます。
まとめ
今回はPDF→ExcelとExcel→PDFの自動変換をPythonでする方法について解説しました。
このように、Pythonを使うとMicrosoft Officeの単純作業を簡単なライブラリやモジュールで自動化させることが出来ます。Pythonを覚えたてのプログラミング初心者でもExcelやCSVには慣れている方が多いと思うので、どうした身近なソフトの作業効率化をPythonで実現してみると良いでしょう。
この記事がお役に立てば幸いです!