👌

【業務効率化】Pythonで大量のWordもExcelも一気にPDF化して、ついでに結合する【Windows対応】【Mac対応したい】

2021/11/29に公開

はじめに

Windowsでのみ動作確認してます。
PDF化はWord、Excelから簡単にできますが、大量のファイルを手作業でPDF化するのが苦痛だったので一発でPDF化、そして結合できるプログラムを作成しました。

こんな感じに動きます。

output.gif

詳しく、コードの解説をしているわけでもないですが、記事読んでいただければ同様の問題を解決できるかと思います。

##すぐ使えるスクリプト
環境:
-Windows10
-Python 3.9.6
前提条件:
-pythonがpcにinstall済み
-Excel,Wordをインストール済み
-ターミナル(コマンドプロンプト)を使用可能

使用する外部ライブラリ
pip install docx2pdf
pip install pywin32
pip install PyPDF2
ms2pdf.py
import docx2pdf
import win32com.client
import PyPDF2
import re
import os

def excel2pdf(input_file, output_file):
    #エクセルを開く
    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)
    #エクセルを閉じる
    app.Quit()

if __name__ == '__main__':
    # 対象ディレクトリを入力(コピペok)(最後に\(¥)をつけない)
    print("Which dir(full path)?:", end="")
    # 対象フォルダ
    input_dir = (input()+"\\").replace('/', os.sep)
    filenames = os.listdir(input_dir)
    output_dir = (input_dir + "pdf/").replace('/', os.sep)
    # ディレクトリが存在しない場合、ディレクトリを作成する
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    for file in filenames:
        # 拡張子が".docx"のものをpdfに変換
        word_match = re.search("\.docx$", file) 
        if word_match: 
            docx2pdf.convert(input_dir+file, output_dir+file[:-5]+".pdf")
            print(file)
        # 拡張子が".xlsx"のものをpdfに変換
        excel_match = re.search("\.xlsx$", file) 
        if excel_match: 
            excel2pdf(input_dir+file, output_dir+file[:-5]+".pdf")
            print(file)
print()
print("-------------------------------")
print("merging PDF from:" + output_dir)
# 結合するPDFファイル一覧を表示
print("↓↓↓↓↓↓↓↓↓↓↓↓ target file ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓")
merger = PyPDF2.PdfFileMerger()

filenames = os.listdir(output_dir) 
num = 0
for file in filenames: 
        merger.append(output_dir + file)
        print(file)
        num += 1
print("↑↑↑↑↑↑↑↑↑↑↑↑ target file ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑")
print("total: " + str(num) + "file")
print()
print("-------------------------------")
print()
# 結合したPDFの名前を入力
print("What merged file name?:", end="")
merged_file_name = input()
# 拡張子(.pdf)がなければ追加する
if merged_file_name[-4:] != ".pdf":
        merged_file_name += ".pdf"
merger.write(output_dir + merged_file_name)
merger.close()

Something went wrong

使い方
①ターミナル(コマンドプロンプト)でpython ms2pdf.pyを実行
②"Which dir(full path)?:"で対象ディレクトリを入力(コピペok)(最後に(¥)をつけない)
③"What merged file name?:"で結合したPDFの名前を入力
③大量のWordもExcelも一気にPDF化して、ついでに結合してくれる


一つ退屈な作業から解放されました。

参考

https://admin-it.xyz/operation-efficiency/python-docx2pdf/

https://laboratory.kazuuu.net/search-for-files-with-a-specific-extension-in-python-using-regular-expressions/

https://news.mynavi.jp/article/zeropython-62/

https://note.nkmk.me/python-pypdf2-pdf-merge-insert-split/

https://qiita.com/koara-local/items/7ad01e0692e36627ba2d

https://www.sejuku.net/blog/67787

Discussion