##目指していることについて
・最終的に目指している形
①作成したexcel、wordをpdf⇒統合用ファルダに入れる
②プログラムを実行し、excel、wordがpdf状態で結合され、提出用フォルダに入る
・現状の作業(全てGUI作業)
①word、Excelファイルを開く
②pdfにエクスポートする
③googleの結合アプリを使用してpdfを探し、ファイルを選び、結合
⑤pdf名の変更
⑥提出用フォルダにpdfを移動
現状は非常に手間がかかっています。
上記を検討していますが、プログラムを作成中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
AttributeError Traceback (most recent call last) <ipython-input-1-13796146faf9> in <module> 82 elif file_p.suffix == '.docx': 83 file_pdf = file1.joinpath(f.replace(file_p.suffix, '.pdf')) ---> 84 WDtoPDF(str(file_p), str(file_pdf)) 85 pdfs.append(str(file_pdf)) 86 <ipython-input-1-13796146faf9> in WDtoPDF(in_wd, out_wd, formatType) 9 #wordをpdfに変換する 10 def WDtoPDF(in_wd, out_wd, formatType = 17): ---> 11 word = comtypes.client.CreateObject('Word.Application') 12 word.Visible = False 13 doc = word.Documents.Open(in_wd) ~\anaconda3\lib\site-packages\comtypes\client\__init__.py in CreateObject(progid, clsctx, machine, interface, dynamic, pServerInfo) 248 if dynamic: 249 return comtypes.client.dynamic.Dispatch(obj) --> 250 return _manage(obj, clsid, interface=interface) 251 252 def CoGetObject(displayname, interface=None, dynamic=False): ~\anaconda3\lib\site-packages\comtypes\client\__init__.py in _manage(obj, clsid, interface) 186 obj.__dict__['__clsid'] = str(clsid) 187 if interface is None: --> 188 obj = GetBestInterface(obj) 189 return obj 190 ~\anaconda3\lib\site-packages\comtypes\client\__init__.py in GetBestInterface(punk) 110 mod = GetModule(tlib) 111 # Python interface class --> 112 interface = getattr(mod, itf_name) 113 logger.debug("Implements default interface from typeinfo %s", interface) 114 # QI for this interface AttributeError: module 'comtypes.gen.Word' has no attribute '_Application'
該当のソースコード
こちらを参照しています
リンク内容
python
1#必要なものを宣言 2import os 3import comtypes.client 4import glob 5import pathlib 6import PyPDF2 7import shutil 8 9#wordをpdfに変換する 10def WDtoPDF(in_wd, out_wd, formatType = 17): 11 word = comtypes.client.CreateObject('Word.Application') 12 word.Visible = False 13 doc = word.Documents.Open(in_wd) 14 doc.SaveAs(out_wd, formatType) 15 doc.Close() 16 word.Quit() 17 18#powerpointをpdfに変換する 19def PPTtoPDF(in_ppt, out_ppt, formatType = 32): 20 powerpoint = comtypes.client.CreateObject("Powerpoint.Application") 21 #ここを1(Ture)にしないとなぜかエラーがでる 22 powerpoint.Visible = 1 23 doc = powerpoint.Presentations.Open(in_ppt) 24 doc.SaveAs(out_ppt, formatType) 25 doc.Close() 26 powerpoint.Quit() 27 28#excelをpdfに変換する 29def ELtoPDF(in_xlsx, out_xlsx): 30 excel = comtypes.client.CreateObject('Excel.Application') 31 excel.Visible = False 32 doc = excel.Workbooks.Open(in_xlsx) 33 doc.ExportAsFixedFormat(0, out_xlsx, 1, 0) 34 doc.Close() 35 excel.Quit() 36 37#pdfをまとめて1つにする 38def pdf_merger(out_pdf, pdfs): 39 merger = PyPDF2.PdfFileMerger() 40 41 for pdf in pdfs: 42 print(pdf) 43 merger.append(pdf) 44 45 merger.write(out_pdf) 46 merger.close() 47 48#結合するexcel,word,powerpoint,pdfがある場所 49file_path = r'C:/Users/yokoc/Desktop/新しいフォルダー' 50 51#変換したPDFファイル・結合したPDFファイルを入れるサブフォルダー 52sub_name = 'box' 53 54file0 = pathlib.Path(file_path) 55file1 = file0.joinpath(sub_name) 56 57#サブフォルダーを作成 58os.makedirs(file1, exist_ok=True) 59 60#もとのファイルがある場所に移動 61os.chdir(file_path) 62files = glob.glob('*') 63 64 65#excel,word,powerpointをpdfに変換し、名前の拡張子も.pdfに変更 66#変換したPDFのパスをリストに渡す 67pdfs = [] 68 69for f in files: 70 file_p = file0.joinpath(f) 71 72 if file_p.suffix == '.xlsx': 73 file_pdf = file1.joinpath(f.replace(file_p.suffix, '.pdf')) 74 ELtoPDF(str(file_p), str(file_pdf)) 75 pdfs.append(str(file_pdf)) 76 77 elif file_p.suffix == '.pptx': 78 file_pdf = file1.joinpath(f.replace(file_p.suffix, '.pdf')) 79 PPTtoPDF(str(file_p), str(file_pdf)) 80 pdfs.append(str(file_pdf)) 81 82 elif file_p.suffix == '.docx': 83 file_pdf = file1.joinpath(f.replace(file_p.suffix, '.pdf')) 84 WDtoPDF(str(file_p), str(file_pdf)) 85 pdfs.append(str(file_pdf)) 86 87 elif file_p.suffix == '.pdf': 88 shutil.copy('./'+ f, './'+ sub_name) #もともとPDFであるものはそのままコピー 89 file_pdf = file1.joinpath(f) 90 pdfs.append(str(file_pdf)) 91 else: 92 pass 93 94#結合したPDFに名前を付け、サブフォルダーに置く 95out_file = str(pathlib.Path(file1).joinpath('out.pdf')) 96#PDFの結合 97pdf_merger(out_file, pdfs)
###環境
Windows 10
Word 2016
Python 3.9.1
pip install comtypesでモジュールをインストール済み
jupyternotebookを使用
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/11 12:20
2021/10/11 12:23