結局Excel大冒険〜自動化とタスクスケジューラに翻弄された話と忘備録

緑色のバツ。。。エーックス!!!

Pythonで自動化。Excelのコピペで躓き、タスクスケジューラで躓き、ヨボヨボになりながらなんとか実現できた話。

Excelファイルのコピペしたいだけならxlwindsのexpand()がまさに期待通りの動きをしてくれました。

https://teratail.com/questions/298650

↑のサイトの質問者様と回答者様、大変参考になりました。ありがとうございました。



Excelファイルのダウンロードから二次利用までをPythonで自動化したかったのです。

ExcelをWEBからダウンロードしてGoogleスプレッドシートに自動転記することは、Excelの入っていないMacで実現できたのだった。もろもろ検索を重ね諸先輩方のやり方を参考にさせていただいて、順調に実現できた。Googleスプレッドシートにさえ転記できれば、あとは慣れたものでFilterやArrayFormulaやimportrangeなどでなんとかなる。(気分でいる。)


Pythonを使えばExcel形式のファイルもExcelアプリを使わなくても扱えた。これはとても便利。バックグラウンドで実行されとてもスマート。楽ちん。

しかし、PythonでExcelファイルをWindowsPCのExcelアプリで扱うことに大きく躓いてしまった。

(私がExcelもPythonも初心者であることが最大の原因で。。。)

せっかくのPythonなのに、なぜExcelファイルをExcelアプリで扱う必要があるかというと、印刷する必要があるから。

Googleスプレッドシートには無い、Excelの書式設定、印刷設定がどうしても必要だった。

(ウェブ上のサービスは印刷に弱い。Googleスプレッドシートも最近は印刷も親切になってきた印象だが、それでもまだ今回の必須レイアウト条件が満たせなかったため、泣く泣くExcelから印刷を。。。。。)

Googleスプレッドシートに転記することはウェブ上のデータのみの話なので、実行時間やレイアウトや運用合格ライン(まあ、これくらいできれば良いでしょうのライン)が許容範囲が大きい。あとからどうとでもなる感じ。

それに比べ、プリントアウトされた物、最終的な印刷物としての一覧表が成果とされた場合、必要なレイアウトの必須条件を満たすには、やはり結局Excelのアプリケーションの印刷ダイアログからプリントアウトしなけらばならなかった。(視認性が悪い一覧表など誰も見る気にならないし。。。故に出力する意味がないしね。。。)

プリンターという最大の制約があるので、Googleスプレッドシートの「いつでもどこでも」な使い方ができなくてもまあいいのかと自分を納得させる。

自動でプリントアウトされているのであれば、日頃の操作は必要ないので、端末が限定されこともデメリットではないはず。

もしかしたら、Excelの達人であれば、噂に聞くVBA?マクロ?とかいうもので可能なのかもしれないが、悲しいことに私はExcelが使えないのだ。

●やること

(Excelアプリが入っているWindows10で実行)

・元となるExcelファイルをダウンロードする。

・別に書式設定や条件付き書式や印刷設定をしたExcelテンプレートテンプレートを用意する。(最後でわかったことだが、「マクロ有りテンプレートファイル」形式にすることとなる。。。)

・直接ダウンロードしたExcelファイルの体裁を整えるよりコピペした方が早いと思ったから。

・元のExcelファイルの内容を全てコピーし、テンプレファイルへ丸ごとペースト。

・値のみがペーストされると書式が適用される。

・そして印刷。

手作業としてはとても単純。だから簡単そう。(だと思ってた)

最初はもっとも単純に考えて実行してみた。

Pythonでキーボードショートカットを押していく。というものだった。

しかし、初回の実行では上手く行ったものの、さまざまなパターンでテストしたところ、何かのタイミングのズレで、画面上のアクティブなウィンドウやアプリケーションの状態がズレていて、キーボード操作と合わなくなってしまった。

これはイカン。確かにPCの状態を関係なしにキーボードを押していくだけなどプログラミングとは呼べない。

方向を変えて、Googleスプレッドシート転記の時に使ったdataframeでto_excelみたいなかんじで読み込む方法で模索するもこれぞという方法が見当たらず。

(dataframeからのto_excelは同名のファイルが上書きされるだけ?書式設定印刷設定された既存ファイルへのペーストという感じではないのかな?己の力量不足である可能性大ですが。。。)

検索に検索を重ね(そもそも検索能力が低いのでしょうね。。。)ぴったりなライブラリにたどり着いたのが冒頭のサイト様。

(ここに辿り着くまでに、いろんな複雑なコピペ、シートをコピペ、コピーするセルをループで回したり、などは出てくるのですが、わたしは書式印刷設定という最大の制約があるので、単純なコピペが必要なのでした。単純すぎて情報が少なかったのか。。。?)

まさにこれ↓。もう一回リンク載せときますね。

https://teratail.com/questions/298650

ありがとうございます。

次の行程は印刷する部分。Pythonではよくわからなかったので、Excelのテンプレートファイルにプリントするだけのマクロを記録しておいて、それをPythonから実行することで解決。(「PythonでControl+pを押す」から少し成長!!)

最後の難関だったのがタスクスケジューラ。

Windowsで定期実行するためなのですが、、、、、難しかった~。

タッスクスケジューラから実行しては、動かず

設定の操作の引数やファイル格納場所などを入力し直したりして。。。

この辺りの設定の仕方が、環境によって色々あるようで、ネット上の諸先輩方の方法がそのままでは当てはまらず、自分の環境に合わせた記述を試行錯誤して。。。

なんとかダウンロードまでは実行できるようになったものの、Excelの起動で躓いている様子。。。

これExcelに引数やオプションの設定はないよね????!!!???

で、

User?
Administrator?

まさにWindows的な設定画面。

×「ユーザーがログインしている時のみ実行する」

○「ユーザーがログインしているかどうかに関わらず実行する」

に変更したらExcel部分が実行されるようになった。(この設定だと、タスクスケジューラを変更する度に管理者パスワードを求めらるみたい。ん?管理者というユーザーってこと?)

なんでだろうな〜。

ログインしてるはずなのに?

Administratorで使ってるはずで?

でもフォルダがUserだったり?

Excel、Officeアプリケーションのログイン?ユーザー名?アプリケーションにログインが必要なの???

複雑だわさ〜

最近「管理者」とか「ユーザー」とかで痛い目を見ることが多い気がして。。。

把握してない自分が悪いんですけど。。。。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中