初質問です。
現在、業務の自動化のため、pythonを用いたexcel操作にチャレンジしております。
その中で、複数シートをまとめて印刷する処理を行いたいのですが、どうしても出力結果が思い通りにいかないため、質問いたしました。
(マクロであれば簡単に処理ができることは承知していますが、承知の上でpythonにチャレンジしています。)
発生している問題・エラーメッセージ
forのループ処理で各シートを印刷しようとしているが、任意のシートが印刷できない。 (このコードで実行した場合、Sheet1とSheet3が3ペア印刷される。理想は、Sheet1からSheet3が1枚ずつ印刷されること。)
import openpyxl as px import pathlib as ph import win32api import win32print p = ph.Path("test.xlsx") #ワークブック読み込み、シート名取得 wb = px.load_workbook(p) sheetnames = wb.get_sheet_names() ws = wb[sheetnames[0]] #名前を付けて保存 wb.save(str(p)) filename = str(p) wb.close() #0-3は、テストの印刷枚数が増えてしまうため仮で入れています。(本当は13シートあります) for i in range(0,3): open(filename, "r") win32api.ShellExecute(0, "print", filename, "/d:""%s" % win32print.GetDefaultPrinter(), ".", 0) wb.active = wb.sheetnames.index(sheetnames[i]) ws = wb.active wb.save(str(p)) wb.close()
python3 (spyder4.0.1)使用
試したこと
・アクティブシートの選択が上手くいっていないのかと思い、印刷処理の代わりに各シートにws ["A1"]= "aa"といったように値を入力してみましたが、その処理はうまくいきました。しかし、そのあと該当.xlsxファイルを開いてみると、Sheet1とSheet3が2つ選択されています。(理想はSheet3のみ選択されていること)
・PCの処理が間に合っていないのかと思い、wb.close()の後ろにtime.sleep()などで処理を一時停止しながら進めてみましたが、すると今度は途中でpermission deniedのエラーが出て処理が進まなくなってしまいました。
以上、拙い文章で申し訳ありませんが、ご回答いただけるとありがたいです。
回答1件
あなたの回答
tips
プレビュー