状況がわからないので、もっと詳細に書いてください。
特に「エクスポート」という単語が具体的にどういった操作を指し示しているのかがわからないです。
一般的にはエクスポートというとファイルが生成されます。
ただ、今回のケースではそうではないように読み取れます。
なので、今どういった状況・画面で困っている状態なのかがピンときません。
from openpyxl import Workbook
wb=Workbook('Book1')
ws=wb.active()
Book1はエクスポートしてから画面に表示されたままで一度も保存していません。
保存していれば、Workbook('Book1')で開くのでしょうが...
あくまでもエクスポート⇒ファイル保存 までを自動でおこないたいのです。
テンポラリでファイル保存される場所も分かっていません。
winでウィンドウを拾ってこれてもファイル名保存で自動化が大変なのはありますが、
どなたかお分かりになる方、よろしくお願いいたします。
状況がわからないので、もっと詳細に書いてください。
特に「エクスポート」という単語が具体的にどういった操作を指し示しているのかがわからないです。
一般的にはエクスポートというとファイルが生成されます。
ただ、今回のケースではそうではないように読み取れます。
なので、今どういった状況・画面で困っている状態なのかがピンときません。
@ilovedog0123
Questioner「ワークブックが作成されます」というのは Excel のウィンドウが開いて未保存のワークブックが表示されるということで、質問はそれをファイルに保存する方法ですよね?
画面操作の通りとは言っても、 Tableau という BI ツールがあってそのエクスポート操作を行うと Excel が開くということまで質問者が分かるわけではないので、そこは言葉で書いていただけると助かります。もっと言えば、質問の本題は「未保存のワークブックを開いている Excel ウィンドウを自動操作して名前をつけて保存すること」であって Tableau 云々は関係ないのでバッサリ省いてもいいです。
API ドキュメントに書いてあるとおりですが、 openpyxl.Workbook
のコンストラクタは Workbook(write_only=False, iso_dates=False)
です。第1引数にワークブック名を渡しても write_only
が真になるだけで、そのワークブックを操作することはできません。また Excel で開いているワークブックを直接操作するような機能もありません。
Excel のウィンドウを操作してワークブックを保存するには pywin32 パッケージ(モジュール名は win32com)が使えそうです。
@ilovedog0123
Questioner有難うございます。以下の部分ですね。
xl = win32.Dispatch('Excel.Application')
wb = xl.Workbooks['Book1']
職場の環境でしか試せれないので明日試してみます。
上記の方法でも良いと思いますが、pyatuoguiをすでに使っているならそっちで保存処理までやってしまってもいいかと思います
@ilovedog0123
Questioner本日、win32.Dispathのオブジェクトで未保存のワークブックが認識できるか確認しましたので報告します。結果は以下のようにうまくいきませんでした。
どなたかコメントをよろしくお願いします。
com_error Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_6244\3186051950.py in
22 # Excelファイルを保存する
23 xl =win32.Dispatch('Excel.Application')
---> 24 wb = xl.Workbooks['Book1']
25 wb.SaveAs(open_path+"./実績一覧.xlsx")
26 wb.close()
c:\Users\iwasah\AppData\Local\Programs\Python\Python39\lib\site-packages\win32com\client\dynamic.py in getitem(self, index)
281 invkind, dispid = self.find_dispatch_type("Item")
282 if invkind is not None:
--> 283 return self.get_good_object(self.oleobj.Invoke(dispid, LCID, invkind, 1, index))
284 raise TypeError("This object does not support enumeration")
285
com_error: (-2147352567, '例外が発生しました。', (0, None, None, None, 0, -2147352565), None)
midoribi さんのおっしゃるとおりですが、 pyautogui で Excel も操作できるならそれで保存を試してみてください。