"""
ExcelファイルをPDFに変換するモジュールです。
このモジュールは、指定されたExcel (.xlsxまたは.xls) ファイルをPDF形式に変換します。
Windows環境でMicrosoft Excelアプリケーションがインストールされている必要があります。
`comtypes` ライブラリを使用してExcelアプリケーションをCOMインターフェース経由で操作します。
関連リンク: :doc:`xlsx2pdf_usage`
"""
import os
try:
import comtypes.client
except Exception:
print("\nxlsx2pdf.py: Import error: comtypes.client")
input("Install: pip install comtypes\n")
[ドキュメント]
def xlsx_to_pdf(input_path, output_path=None):
"""
指定されたExcelファイルをPDF形式に変換します。
この関数は、Microsoft ExcelアプリケーションのCOMインターフェースを介してExcelファイルをPDFに変換します。
変換はExcelの `ExportAsFixedFormat` 機能を利用して行われます。
変換プロセス中にExcelアプリケーションは非表示で実行され、完了後に終了されます。
Windows環境でMicrosoft Excelがインストールされている必要があります。
:param input_path: str: 変換するExcelファイルのフルパス。例: "C:\\path\\to\\document.xlsx"
:param output_path: str, optional: 出力するPDFファイルのフルパス。
Noneの場合、入力ファイルと同じディレクトリに拡張子を.pdfとしたファイル名で出力されます。
例: "C:\\path\\to\\document.pdf"
:returns: str or None: PDFファイルの出力パス。変換に成功した場合は出力パスを返し、失敗した場合はNoneを返します。
"""
excel = comtypes.client.CreateObject("Excel.Application")
excel.Visible = 0
excel.DisplayAlerts = 0
xlTypePDF = 0
input_path = os.path.abspath(input_path)
if output_path is None:
output_path = os.path.splitext(input_path)[0] + ".pdf"
else:
output_path = os.path.abspath(output_path)
print(f" Converting '{os.path.basename(input_path)}' to PDF...")
workbook = None
try:
workbook = excel.Workbooks.Open(input_path, ReadOnly=True)
workbook.ExportAsFixedFormat(xlTypePDF, output_path)
workbook.Close(False)
print(f" Successfully converted to PDF: '{output_path}'")
return output_path
except Exception as e:
print(f" Error converting '{input_path}' to PDF: {e}")
if workbook is not None:
try:
workbook.Close(False)
except Exception:
pass
return None
finally:
excel.Quit()
if __name__ == "__main__":
import sys
input_path = sys.argv[1] if len(sys.argv) > 1 else None
output_path = sys.argv[2] if len(sys.argv) > 2 else None
if not input_path:
print("Usage: python xlsx2pdf.py input.xlsx [output.pdf]")
input("\nPress ENTER to terminate>>\n")
raise SystemExit(1)
xlsx_to_pdf(input_path, output_path)
print("\nProgram execution completed.")
input("\nPress ENTER to terminate>>\n")