質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

3232閲覧

Pythonで複数のエクセルをPDF出力後、裏でエクセルが起動したままになってしまう。

退会済みユーザー

退会済みユーザー

総合スコア0

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

COM

COM(Component Object Model)はMicrosoftによるコンポーネントテクノロジーであり、 ソフトウェアの再利用を目的とした技術を指します。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/04/24 07:32

編集2022/01/12 10:55

エクセルで複数の請求書を作成した後に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

どのようにすればプログラムの最後にエクセルを閉じることができるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2020/04/24 09:06 編集

openpyxlを使っていないのでopenpyxlのタグは外した方がいいですよ。かわりにWindowsタグとCOMタグを入れるべきです。 タイトルの"openpyxlで"も消した方がいいですね。
退会済みユーザー

退会済みユーザー

2020/04/24 09:12

ありがとうございます。 修正しました。
coco_bauer

2020/04/24 09:32

Excelを複数回起動しているところに問題があるのではないでしょうか? "excel = win32com.client.DispatchEx("Excel.Application") "をFor文の前に移し、 ”excel.Quit()”をFor構文の外に移す(インデントなしで、プログラムの最後の行に移す) というのを試してみてください。
退会済みユーザー

退会済みユーザー

2020/04/24 09:48

ありがとうございます。 なるほど、原因はそこかもしれません。 確かに複数回起動する意味はないですね。 ただ、修正して2回試してみましたが、まだ エクセルが終了しないです。 ただ原因は特定できてきたと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問