エクセルで複数の請求書を作成した後にPDFに全て変換して出力するプログラムを書いています。
プログラムは最後まで実行できるのですが、なぜかタスクマネージャーを見るとエクセルが閉じられてません。
ただ、実際にはエクセルは起動しているようには見えないです。(裏でエクセルが開いたままになっちゃってます。)
プログラムの終了時にエクセルを閉じたいのですが、調べても間違っているようなところは特にないように思います。
ソースコードは以下です。
試したこと
修正依頼を受けて
excel = win32com.client.DispatchEx("Excel.Application")
excel.Quit()
の2つをfor文の外に出しました。
それでもエクセルが開いたままになっています。
#pdfの作成、保存
より下の行を消すとエクセルはしっかりと終了
してくれます。
python
1import openpyxl, pprint 2import datetime 3import locale 4import calendar 5from dateutil.relativedelta import relativedelta 6import win32com.client #win32comをインポートするだけでは上手くいかないので注意!! 7 8locale.setlocale(locale.LC_CTYPE, "Japanese_Japan.932") 9 10# ファイル名の指定など --- (*1) 11file_list = r"G:\Fのバックアップ\ドキュメント\銀行明細関連\primefee-invoice\atena.xlsx" 12file_invoice= r"G:\Fのバックアップ\ドキュメント\銀行明細関連\primefee-invoice\hinagata.xlsx" 13file_out_iv = r"G:\Fのバックアップ\ドキュメント\銀行明細関連\primefee-invoice\invoices\out-invoice.xlsx" 14 15 16# 宛名一覧を読み込む --- (*2) 17wb = openpyxl.load_workbook(file_list, data_only=True) # 数式でなく値を取り出す場合 18ws = wb["Sheet1"] # Sheet1を選ぶ 19# 起点となる日 20 21excel = win32com.client.DispatchEx("Excel.Application") 22 23for i in range(2,8): 24 name = ws.cell(row = i, column=1).value # 宛名を得る 25 26 date = datetime.datetime(2020,7,1) 27 print('起点となる日:'+date.strftime('%Y年%m月%d日')) 28 29 shimemo = date + relativedelta(months=2) 30 31 shimebi = calendar.monthrange(int(shimemo.strftime('%Y')),int(shimemo.strftime('%m')))[1] 32 33 # 明細の作成 34 meisai = 'primefee.com利用料'+date.strftime('%Y年%m月%d日')+'~'+shimemo.strftime('%Y年%m月')+str(shimebi)+'日' 35 36 # list_data = ws["A3:F10"] # 任意の範囲を取得 37 38 # 請求書のテンプレートを読む --- (*3) 39 wb_iv = openpyxl.load_workbook(file_invoice) 40 ws_iv = wb_iv.active 41 42 # wb_ds = openpyxl.load_workbook(file_delivery) 43 #ws_ds = wb_ds.active 44 45 # 宛名と日付を書き込む --- (*4) 46 cdate = datetime.datetime.today().strftime("%Y/%m/%d") 47 ws_iv["C6"].value = name 48 ws_iv["F2"].value = cdate 49 ws_iv["C13"].value = meisai 50 51 # ws_ds["A3"].value = name 52 # ws_ds["F2"].value = cdate 53 54 # 新しく保存する --- (*6) 55 wb_iv.save(r'G:\Fのバックアップ\ドキュメント\銀行明細関連\primefee-invoice\invoices'+ '\' + name + 'primefee請求書' + date.strftime('%Y年%m月%d日') + '.xlsx') 56 wb_iv.close() 57 58 # pdfの作成、保存 59 60 file = excel.Workbooks.Open(r'G:\Fのバックアップ\ドキュメント\銀行明細関連\primefee-invoice\invoices'+ '\' + name + 'primefee請求書' + date.strftime('%Y年%m月%d日') + '.xlsx') 61 file.WorkSheets(1).Select() 62 file.ActiveSheet.ExportAsFixedFormat(0,r'G:\Fのバックアップ\ドキュメント\銀行明細関連\primefee-invoice\invoices'+ '\' + name + 'primefee請求書' + date.strftime('%Y年%m月%d日') + '.pdf') 63 file.Close() 64excel.Quit()
環境
Windows10
python3.6.7
どのようにすればプログラムの最後にエクセルを閉じることができるでしょうか?
あなたの回答
tips
プレビュー