現在、以下の流れをVBSを使用することで自動化することを検討しています。
1.VBAを使ってExcelファイルを編集
2.編集後の画面をプリントスクリーン
3.画像を保存
4.画像をトリミング
1,2,4はVBSやバッチで組むことはできたのですが、
3ができるのかどうか不明です。
※mspaint.exeで実行しようとしましたが、起動時のタイミング調整が難しいことと起動してもアクティブにならないことがあることからやめようと思っています。
プリントスクリーンでクリップボードにコピー状態になっている画像をImageMagickで保存することはできるのでしょうか?
こんにちは。自動化の方針があまりよろしくないような気がしますが・・・
(方法その1)
エクセルをHTML形式で保存すれば,画像を抜き出せます。なので,プリントスクリーンする必要はありません。
WordやExcelに貼り付けられた画像を一発で抜き取る方法 [self reblog]※情報古いです | マイペースクリエイターの覚え書き
http://mypacecreator.net/blog/archives/1319
(方法その2)
あえてエクセルの画面をキャプチャしたいとしても,低機能なプリントスクリーンコマンドをじかに使うのではなく,高機能なキャプチャソフト(フリーソフト)で,キャプチャと同時に画像ファイルとして保存されるようにすればよいです。そのソフトのCUI呼び出しをVBSから書けばよいですね。そして保存された画像に対してトリミングなどの処理を走らせると。
→「CUI 画面キャプチャ 保存 フリーソフト」でお好みのソフトをお探しください
(方法その3)ペイントで済ませる。
>mspaint.exeで実行しようとしましたが、起動時のタイミング調整が難しいことと起動してもアクティブにならないことがある
どんなコードを書いた結果,ペイントではうまくいかなかったのでしょうか?コードを提示していただければ,改善できる可能性もあります。できればペイント貼り付けは避けたほうが良いですけどね。。
GUIの関わる自動化って,安定させるのがとにかく難しいですよね。CUIでできるだけ済ませるのが近道です。
ではよろしくお願いします。
こんにちは。自動化の方針があまりよろしくないような気がしますが・・・
(方法その1)
エクセルをHTML形式で保存すれば,画像を抜き出せます。なので,プリントスクリーンする必要はありません。
WordやExcelに貼り付けられた画像を一発で抜き取る方法 [self reblog]※情報古いです | マイペースクリエイターの覚え書き
http://mypacecreator.net/blog/archives/1319
(方法その2)
あえてエクセルの画面をキャプチャしたいとしても,低機能なプリントスクリーンコマンドをじかに使うのではなく,高機能なキャプチャソフト(フリーソフト)で,キャプチャと同時に画像ファイルとして保存されるようにすればよいです。そのソフトのCUI呼び出しをVBSから書けばよいですね。そして保存された画像に対してトリミングなどの処理を走らせると。
→「CUI 画面キャプチャ 保存 フリーソフト」でお好みのソフトをお探しください
(方法その3)ペイントで済ませる。
>mspaint.exeで実行しようとしましたが、起動時のタイミング調整が難しいことと起動してもアクティブにならないことがある
どんなコードを書いた結果,ペイントではうまくいかなかったのでしょうか?コードを提示していただければ,改善できる可能性もあります。できればペイント貼り付けは避けたほうが良いですけどね。。
GUIの関わる自動化って,安定させるのがとにかく難しいですよね。CUIでできるだけ済ませるのが近道です。
ではよろしくお願いします。
(1)…AppActivateを記述しましたが、ペイントがアクティブになるのではなく、タスクバー上のペイントのアイコンが黄色?のように点滅するだけでアクティブにはなりません。
(2)…しています。さらにVBSで実行している(記述している)Batファイルの1行目にもTimeoutを入れています。
(3)…会社のPCにファイルがあるので、明日確認してみます。
※AppActivateがうまくいけばあとはSendkeysで何とかできる気がするのですが…
最初のコメントに記載したURL内の解説で,下記のようなくだりがあります。
~~
アプリケーションにキー操作のメッセージを送るためには,そのアプリケーションがアクティブになっている必要がある。
そして,アプリケーションのウィンドウをアクティブにするためには,WSHでは AppActivate を使う。
しかしこの AppActivate は,「ダブルクリック等でスクリプトを起動」という状況ではエクスプローラにフォーカスが行ってしまい,失敗する。
(ファイルを選択してEnterキーを押下した場合も同じ。)
~~
ということですが,今回はVBSをどうやって実行しているのでしょうか?
→どこにVBSファイルを置いているのか。ダブルクリックでフォルダ上のVBSをじかに起動しているのか(=アクティブ状態に関連して問題がおきやすい)。それとも,BATやコマプロ上からCUIでWSHを起動しているのか。
WScript.Sleepで15秒間を空けてファイルを手入力で保存してVBSがやがて動くようにしたのですが、保存したファイルがVBSで認識できていないのか、VBSの中で起動しているBATファイルがうまくファイルを読んでくれません。
#なんか言い出しっぺの気がしますので本題の所を...
http://sharp-bang.jp/prog/im.html
convert clipboard: clip_saved.png
トリミング(crop)も同時に出来ます。
http://takuya-1st.hatenablog.jp/entry/20120411/1334169320
convert -crop 960x720+160+0 clipboard: clipcrop_saved.png
vbsからは
Dim WshShell Dim saved_filename Dim returncode Const SHOWMINIMIZED = 7 Const Convert = """c:\path\to\convert""" Const CropSize = "960x720+160+0" saved_filename = """c:\other\to\clipcrop_saved.png""" Set WshShell = WScript.CreateObject("WScript.Shell") returncode = WshShell.Run(Convert & " -crop " & CropSize & " clipboard: " & saved_filename, SHOWMINIMIZED, true) If returncode <> 0 Then MsgBox "convert return code: " & returncode End If
こんな感じでしょうか。
resultが0以外なら、何らかの問題が起きてます。
こういうのはエラーが起きないよう、またエラーが発生してないかと、状況と結果を逐一確認していく事が中心になります。
根気よく行きましょう。
(1)…AppActivateを記述しましたが、ペイントがアクティブになるのではなく、タスクバー上のペイントのアイコンが黄色?のように点滅するだけでアクティブにはなりません。
2014/12/25 22:30:54(2)…しています。さらにVBSで実行している(記述している)Batファイルの1行目にもTimeoutを入れています。
(3)…会社のPCにファイルがあるので、明日確認してみます。
※AppActivateがうまくいけばあとはSendkeysで何とかできる気がするのですが…
最初のコメントに記載したURL内の解説で,下記のようなくだりがあります。
2014/12/26 11:16:37~~
アプリケーションにキー操作のメッセージを送るためには,そのアプリケーションがアクティブになっている必要がある。
そして,アプリケーションのウィンドウをアクティブにするためには,WSHでは AppActivate を使う。
しかしこの AppActivate は,「ダブルクリック等でスクリプトを起動」という状況ではエクスプローラにフォーカスが行ってしまい,失敗する。
(ファイルを選択してEnterキーを押下した場合も同じ。)
~~
ということですが,今回はVBSをどうやって実行しているのでしょうか?
→どこにVBSファイルを置いているのか。ダブルクリックでフォルダ上のVBSをじかに起動しているのか(=アクティブ状態に関連して問題がおきやすい)。それとも,BATやコマプロ上からCUIでWSHを起動しているのか。