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

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

新規登録して質問してみよう
ただいま回答率
85.35%
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4133閲覧

openpyxlを利用した複数シートの印刷(選択)について

myy388

総合スコア16

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/06/09 04:56

初質問です。
現在、業務の自動化のため、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のエラーが出て処理が進まなくなってしまいました。

以上、拙い文章で申し訳ありませんが、ご回答いただけるとありがたいです。

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

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

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

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

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

ty100

2020/11/09 21:59 編集

間違えました
guest

回答1

0

ベストアンサー

下記ブログで解決しますよ。
おそらく、「ws.sheet_view.tabSelected = True」を追加して、タブを選択すればOKかと思います。
「ブラック企業の文系サラリーマンがPythonを駆使して定時退社」
https://oliveferret3.sakura.ne.jp/wp/2020/11/09/python%E3%81%A7%E8%A4%87%E6%95%B0%E3%81%AE%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB%E3%82%B7%E3%83%BC%E3%83%88%E3%82%92%E8%87%AA%E5%8B%95%E5%8D%B0%E5%88%B7%EF%BC%81/

投稿2020/11/09 21:59

ty100

総合スコア7

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

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

myy388

2020/11/10 00:00

ありがとうございます、参考にいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問