ExcelのShell関数を使い、処理が終わるまで待たせることができるのは先日書いたが、そうすると前の処理が終了してから次の処理を流す、ということも可能になる。対象はShellで呼び出せるものならいいので、DosコマンドでもPowerShellでも、実行形式のプログラムでもよいだろう。
そうすると、簡易的なジョブスケジューラーも作れてしまうのではないか。それもたいしたコードでなくてもいい。また、パラレルで動いていいものはパラレルで動作させることができるよう、スケジュールの記述を工夫すればよい。
ただ、問題がある。大型汎用機でのバッチ処理では、プログラム言語ではなくOSがエラーを返す。正常終了したか否かはプログラムに記載せずとも、ちゃんとジョブを呼ぶ側へ正常終了、ワーニング、エラーなどのステータスを返却してくれていたし、予定していた資源よりも多く使おうとしていたらそれも記録されるようになっていた。
オープン系ではそれをどうすればいいのだろう?プログラムではそれなりのコードを返すことはできる。しかし、ExcelのShell関数ではその取得は望めない。WaitForSingleObjectならどうだろうと調べると、なんかできるかもしれなさそうだ。
http://msdn.microsoft.com/ja-jp/library/cc429427.aspx
Excelを使う必要があるかというとないが、まあ、Jobを登録したり、状態をシート上で監視できるってことでどうだろう。そもそもサーバーにはOffice製品を入れないこともあるのでどうなんだか・・。
しかしながら、もしかするとプログラム側でも何か意識しておかないといけないかもしれないが、これで大型汎用機でのバッチ処理もどきができるかもしれない。本格的にやろうとするとジョブ監視プログラムも作成した方がいいのだろうけれど、・・。
PowerShellで変なツールをいくつか作っているので、それと組み合わせて試してみようと思う。
そうすると、簡易的なジョブスケジューラーも作れてしまうのではないか。それもたいしたコードでなくてもいい。また、パラレルで動いていいものはパラレルで動作させることができるよう、スケジュールの記述を工夫すればよい。
ただ、問題がある。大型汎用機でのバッチ処理では、プログラム言語ではなくOSがエラーを返す。正常終了したか否かはプログラムに記載せずとも、ちゃんとジョブを呼ぶ側へ正常終了、ワーニング、エラーなどのステータスを返却してくれていたし、予定していた資源よりも多く使おうとしていたらそれも記録されるようになっていた。
オープン系ではそれをどうすればいいのだろう?プログラムではそれなりのコードを返すことはできる。しかし、ExcelのShell関数ではその取得は望めない。WaitForSingleObjectならどうだろうと調べると、なんかできるかもしれなさそうだ。
http://msdn.microsoft.com/ja-jp/library/cc429427.aspx
Excelを使う必要があるかというとないが、まあ、Jobを登録したり、状態をシート上で監視できるってことでどうだろう。そもそもサーバーにはOffice製品を入れないこともあるのでどうなんだか・・。
しかしながら、もしかするとプログラム側でも何か意識しておかないといけないかもしれないが、これで大型汎用機でのバッチ処理もどきができるかもしれない。本格的にやろうとするとジョブ監視プログラムも作成した方がいいのだろうけれど、・・。
PowerShellで変なツールをいくつか作っているので、それと組み合わせて試してみようと思う。