rockoj
@rockoj

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

pyhonでファイルを印刷した際、ポップアップが表示されて動作が中断される。

解決したいこと

pyhonでファイルを印刷するプログラムを作っている際、
Excelファイルを印刷後に「〇〇の変更内容を保存しますか?」の
ポップアップが表示され、ボタンを押してポップアップを消さないと
先の処理へ進まない状態になっています。

ShellExecute
どのように解決すれば良いでしょうか?

発生している問題・エラー

image.png

該当するソースコード

xlsxs = glob.glob(フォルダのパス + r'\*.xlsx')
for i in xlsxs:

    win32api.ShellExecute(
        0,
        "print",
        i,
        None,
        ".",
        0
    )

自分で試したこと

手動でポップアップを閉じると先の処理へに進みます。
下記を読んでみたのですが、ShellExecute関数でポップアップを取り扱うオプション設定などを見つけることはできませんでした。
https://learn.microsoft.com/ja-jp/windows/win32/api/shellapi/nf-shellapi-shellexecutea

0

1Answer

同じ環境が作れないので推測ですが、実は、ShellExecute自体はすぐに制御を返していませんか?print文とかで容易に確認できるかと。

1Like

Comments

  1. @rockoj

    Questioner

    コメントありがとうございます。

    試しに下記のコードを実行した所、印刷後約2分経過したタイミングで"a"がprintされていました。
    なので、「先に進めない」というのは誤りでした。


    win32api.ShellExecute(
    0,
    "print",
    フォルダのパス,
    None,
    ".",
    0
    )
    print("a")


    ファイルを手動で閉じた場合は、直後に"a"がprintが返ってくるので、ファイルを閉じようとする処理のタイムアウトが2分に設定されているのかなと推測しています。

    毎回この部分で2分待つ前提にすると処理時間が一気に長くなってしまうので、引き続き対策を考えていこうと思います。
  2. ブックの印刷時、なぜか変更ありになってしまうのがよくなさそうですね。

    例えば、別のブック(空でいいかと)で実験するとどうなりますか?
  3. @rockoj

    Questioner

    手動で作成した新規ブックで試した場合はポップアップが出現しませんでした。

    確認してみたところ、使っていたブックはプログラムから作成されたもので、一度も手で開かれていないものだったようです。

    一度開いて保存することで解決するかな?と思い、下記のようなコードにしてみたところ、無事ポップアップを出さずに保存することができました。


    本当に助かりました!
    ありがとうございます。

    xlsxs = glob.glob(フォルダのパス + r'\*.xlsx')

    #↓追加部分。Excelへのアクセスを可能にする。
    exap = win32com.client.Dispatch("Excel.Application")

    for i in xlsxs:
      #↓追加部分。開いて保存しら閉じるだけ。
    wb = exap.Workbooks.Open(Filename = i)
    wb.Save()
    wb.Close

    win32api.ShellExecute(
    0,
    "print",
    i,
    None,
    ".",
    0
    )
  4. よかったです。本当はpywin32で印刷までできたらいいのかも知れませんね。

    いずれにせよクローズをお願いします。

Your answer might help someone💌