Pythonなら、Excelファイルが単体でも複数でも、プログラムを実行するだけでPDF変換があっという間にできて仕事が爆速化します。
この記事ではpywin32というライブラリを使用した方法を、次の2パターンでご紹介します。
- 特定のExcelファイルをPDFに変換する
- 複数のExcelファイルをまとめてPDFに変換する
特定のExcelファイルをPDFに変換
“旅行日程_A様.xlsx”を指定してPDFにしました。
#特定のExcelファイルをPDFに変換
import win32com.client
import os
#エクセルアプリケーションを使用する宣言
excel=win32com.client.Dispatch("Excel.Application")
#ファイル名を指定
xlsx_file="旅行日程_A様.xlsx"
path=os.path.join(os.getcwd(), xlsx_file)#ファイルがあるディレクトリのパスとファイルパスをくっつける
file=excel.Workbooks.Open(path)
#対象シートを指定
file.WorkSheets(1).Activate()
#PDFのファイル名を生成
pdf_filename=path.split(".")[0]
#PDFファイルのパスを生成
pdf_path=os.path.join(os.getcwd(), pdf_filename)
#PDFに変換
file.ActiveSheet.ExportAsFixedFormat(0, pdf_path)
#エクセルを閉じる
file.Close()
excel.Quit()
コーディング解説
9行目で、PDF化したいファイル名を””内に入力してください。
11行目ではjoinという関数を使い、ファイルのあるディレクトリと、9行目で取得したファイルの絶対パスを結合しています。
指定ファイルの絶対パスをos.getcwd()を使用して取得していますが、
os.path.abspath()を利用して、path=os.path.abspath(xlsx_file)と書いてもOKです。
19行目で、PDFのファイル名が「元のExcelファイル名と同じ名前+拡張子」になります。
複数のExcelファイルをまとめてPDFに変換
特定フォルダ内にある、すべてのExcelファイルをPDFに変換したい場合です。
#複数のExcelファイルをまとめてPDFに変換
import win32com.client
import os
from glob import glob
#エクセルアプリケーションを起動
excel=win32com.client.Dispatch("Excel.Application")
#フォルダ内のxlsxファイルを取得
xlsx_files=glob(os.path.join(os.getcwd(), "*.xlsx"))
for xlsx_file in xlsx_files:
#エクセルファイルを開く
file=excel.Workbooks.Open(xlsx_file)
#対象シートを指定(例えば、最初のシートを指定する場合)
sheet=file.WorkSheets(1)
sheet.Activate()
#PDFファイル名を生成
pdf_filename=xlsx_file.split(".")[0]
#PDFファイルの絶対パスを生成
pdf_path=os.path.join(os.getcwd(), pdf_filename)
#PDF変換
sheet.ExportAsFixedFormat(0, pdf_path)
#エクセルを閉じる
file.Close()
#エクセルアプリケーションを終了
excel.Quit()
コーディング解説
すべてのExcelファイルをPDFに変換するには、for文を使います。
10行目ですべてのExcelファイル、つまり拡張子が.xlsxで終わるファイルを*.xlsxで取得し、フォルダの絶対パスとつなげています。
このように一瞬ですべてのExcelファイルがPDFになりました!
補足
印刷設定もコードに追加すれば、Excelファイルの向きや余白も手動で設定する必要がなくなります!
URLリンクが付いている場合はリンクも保持されます。