LoginSignup
1
3

More than 3 years have passed since last update.

Excel×Pythonで作業フローを効率化する方法を調べてみた⑤

Last updated at Posted at 2020-05-06

今回の目的

PythonでExcelファイルをPDFに変換して出力する。
※例のごとく、説明はプログラムのコメントで記載しています。

事前準備

Win32comパッケージのインストール(PythonでのCOMを通じたExcel操作のため)
https://github.com/mhammond/pywin32/releases
ここから、自分の環境に合わせてダウンロードインストール(pythonのバージョン、64ビットか32ビット)
※pipでもいいのかな?(やっていないですが)

プログラムの流れ

①sample_pdf.xlsxファイルを取り込む
②PDFファイル名を作成(pdf_[title]_[createdate].pdf ※[]はエクセルから取得)
③PDFファイルを出力する

プログラム実行結果確認

※プログラムは一番下

取り込むエクセル(sample_pdf.xlsx)

キャプチャ.JPG

出力ファイル(pdf_[title]_[createdate].pdf)

キャプチャ.JPG
キャプチャ.JPG

プログラム

pdf_create.py
import pathlib
import openpyxl
from win32com import client

#読み込むエクセルファイル
in_filepass = pathlib.Path("./data/sample_pdf.xlsx")

#win32com > client > Excel操作オブジェクトを取得
xlApp = client.Dispatch("Excel.Application")

#sample_pdf.xlsxを取得(※resolveは相対パス⇒絶対パス)
book = xlApp.workbooks.open(str(in_filepass.resolve()))

for sheet in book.Worksheets:

    #エクセルからタイトル(セルC2)を抽出
    title = str(sheet.Range("C2").value)
    #エクセルから資料作成日付(セルH2)を抽出
    createdate = str(int(sheet.Range("H2").value))

    #出力するPDFのファイルパスobjを作成(pdf_[title]_[createdate].pdf)
    out_filepass = pathlib.Path("./data/output/pdf_" + title + "_" + createdate + ".pdf")

    #PDFファイルを出力(※resolveは相対パス⇒絶対パス)
    sheet.ExportAsFixedFormat(0, str(out_filepass.resolve()))

book.Close()
xlApp.Quit()

まとめ

PDFもできました。やった感がありますね!
ただ、PDFはネットを調べているとExcelに戻せそうなので改ざんされると困るのであれば、使えなさそうですね。
win32comパッケージですが、いろんな事ができそうです。
ショートカットをつくったり、メールを自動保存したり。
このあたり、調べてみるのも面白い気がしました。

以上です、ありがとうございました(*'▽')

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3