(^ω^)PythonでExcelシートをそのままPDFに変換してえ…
仕事でPythonを用いてExcelシートのPDF変換をシステム化しようと思ったのですが、
さっぱり/(^o^)\
普通のWindowsだったらExcelのエクスポート > PDFの作成
で一発で変換できるのですが、
AWS Linux2上でPythonだとどうやるのか全く分からず/(^o^)\
少し調べてみたので、記事にまとめてました。
環境・条件
AWS Linux 2上でPythonを使ってPDF変換を目指します。
変換方法
ExcelをPDFに変換する方法は、大きく分けて2種類あります。
方法1: openpyxlとnumpyを使用する
Pythonのライブラリであるopenpyxlとnumpyを利用してExcelシートのデータを処理し、PDFに出力する方法です。
- Python環境にopenpyxlとnumpyをインストールする。
- Excelファイルを読み込み、必要なデータ処理を行う。
- 処理したデータをPDF形式で出力する。
この方法だとPythonのライブラリだけ完結しますが、シートをそのままPDFに変換するのは少し厳しいみたいです。
簡単なグラフなどをPDFにするには向いてる模様。
方法2: サードパーティーのパッケージを利用する
どうやらLibreOfficeやunoconvのパッケージを利用すると変換できるみたいです。
LibreOffice
LibreOfficeは無料のオフィススイートで、AWS Amazon Linux 2でも利用可能です。
- AWS Amazon Linux 2環境でEPELリポジトリを有効にする。
- LibreOfficeをインストールする。
- コマンドラインからLibreOfficeを使用してExcelファイルをPDFに変換する。
以下のようなコードで変換できます。
import subprocess
def convert_to_pdf(input_file, output_file):
try:
subprocess.run(["libreoffice", "--headless", "--convert-to", "pdf", "--outdir", output_file, input_file], check=True)
print(f"変換完了: '{input_file}' -> '{output_file}'")
except subprocess.CalledProcessError as e:
print(f"エラーが発生しました: {e}")
convert_to_pdf("path/to/your/excel-file.xlsx", "path/to/output/directory")unoconv
unoconvはLibreOfficeの機能を利用してファイル変換を行うコマンドラインツールです。
特にAWS Amazon Linux 2のようなサーバー環境や自動化スクリプトで役立ちます。
- AWS Amazon Linux 2環境でEPELリポジトリを有効にする。
- unoconvとLibreOfficeをインストールする。
- Pythonスクリプトを使用してunoconvを実行する。
LibreOfficeと同じようなコードで変換できます。
import subprocess
def convert_excel_to_pdf(file_path):
subprocess.run(["unoconv", "-f", "pdf", file_path])
convert_excel_to_pdf("path/to/your/excel-file.xlsx")LibreOfficeとunconvの比較
LibreOfficeはGUIでの利用が可能というメリットがありますが
今回のようなCUIでの利用の場合、単純なスクリプトや自動化に向いている
unoconv が適しているようです。
補足: EPELリポジトリとは
EPELはExtra Packages for Enterprise Linuxの略だそうです。
このリポジトリは、Fedoraプロジェクトが提供する、Red Hat Enterprise Linux(RHEL)とその派生版(CentOS、Amazon Linuxなど)用の高品質な追加パッケージのコレクションです。
これにより、標準のリポジトリにはないプログラムやツールを利用できるようになります。
まとめ
Pythonの標準ライブラリだけではExcelシートをそのままPDFに変換することは困難であるため、
unconvといったサードパーティーのパッケージを利用するのがよさそうです。


コメント