strawberry perlについて教えてください。

perl hoge.plだとopen(OUTしている部分で指定の場所にファイルができるのですが、
windowsのタスクに設定し定期実行させた場合起動はされているのですが、0byteのファイルが出力されます。どうもWin32のライブラリがタスクで起動した場合うまく動かないようなのですが
どうすれば動くかお知恵をかして頂けますでしょうか。

OS:windows 7 enterprise 64bit
strawberry perl

script
#!/usr/bin/perl

use strict;
use warnings;
use Encode;

use Win32::OLE;
use Win32::OLE::Const 'Microsoft Excel';
use Win32::OLE::Variant;

my $excel;
eval {
Win32::OLE->GetActiveObject('Excel.Application');
};
if ($@) {
die "Excelが入っていません。 $@";
}
unless (defined $excel) {
$excel = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;}) or die $!;
}
$excel->{Visible} = 'False';
$excel->{DisplayAlerts} = 'True';

my $filename = "/tmp/aaaa.xlsx";
my $book = $excel->Workbooks->Open({'FileName' => $filename,'Password' => '1','ReadOnly' => 'True'});

open(OUT, "/tmp/abc.txt");
my $i = 0;
while (my $sheet = $book->Worksheets(++$i)) {
print OUT $sheet->{Name}."\n";
}

回答の条件
  • 1人50回まで
  • 登録:
  • 終了:2012/10/10 22:38:13
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.2

回答回数4973ベストアンサー獲得回数2154

ポイント190pt

Excel のファイル名の指定で、ドライブが抜けていますが、タスクスケジューラでは、カレントディレクトリの指定をしていますか?

データが置いてあるのが、D ドライブで、タスクは HOME がある C ドライブのディレクトリ、ってことじゃないかと、想像してます。

スクリプトでドライブレターを付けて Excel の Book を指定するか、タスクスケジューラの「プログラムの開始」で「開始(オプション)」で、カレントディレクトリに Excel Book があるディレクトリを指定すると、うまくいくんじゃないか、という気がします。

http://www.atmarkit.co.jp/fwin2k/win2ktips/1368taskw7/taskw7.html
http://www.atmarkit.co.jp/fwin2k/win2ktips/1368taskw7/taskw7_07-s.gif

他6件のコメントを見る
id:studio2021

batを起動するタスクも,plを直接動かす方も同じユーザだったので、正直ここは普通に理詰めでやってたら気づかないですね。。

2012/10/10 22:40:33
id:a-kuma3

的外れな回答でしたが、解決のとっかかりくらいには、なれたようで、正直、ほっとしました (^^ゞ

2012/10/10 23:21:51

その他の回答1件)

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

id:studio2021

ありがとうございます。
上記のUAC解除をしてみましたが、うまくいきませんでした。

2012/10/07 11:43:47
id:studio2021

hello worldとだけ出す。hoge1.plをかいてタスクに入れましたがそれは正常に動いております。

id:a-kuma3 No.2

回答回数4973ベストアンサー獲得回数2154ここでベストアンサー

ポイント190pt

Excel のファイル名の指定で、ドライブが抜けていますが、タスクスケジューラでは、カレントディレクトリの指定をしていますか?

データが置いてあるのが、D ドライブで、タスクは HOME がある C ドライブのディレクトリ、ってことじゃないかと、想像してます。

スクリプトでドライブレターを付けて Excel の Book を指定するか、タスクスケジューラの「プログラムの開始」で「開始(オプション)」で、カレントディレクトリに Excel Book があるディレクトリを指定すると、うまくいくんじゃないか、という気がします。

http://www.atmarkit.co.jp/fwin2k/win2ktips/1368taskw7/taskw7.html
http://www.atmarkit.co.jp/fwin2k/win2ktips/1368taskw7/taskw7_07-s.gif

他6件のコメントを見る
id:studio2021

batを起動するタスクも,plを直接動かす方も同じユーザだったので、正直ここは普通に理詰めでやってたら気づかないですね。。

2012/10/10 22:40:33
id:a-kuma3

的外れな回答でしたが、解決のとっかかりくらいには、なれたようで、正直、ほっとしました (^^ゞ

2012/10/10 23:21:51
  • id:cx20
    以下のツールでトレースしてみたら、原因がつかめるかもしれません(権限の問題なのか、パスの問題なのか?など)

    ■ Process Monitor
    http://technet.microsoft.com/ja-jp/sysinternals/bb896645.aspx
  • id:cx20
    > ただのからのxlsxなのですが、タスクでやった場合のみうまくいかないようです。

    何となくですが、以下のケース(非対話型アプリケーションからの Office オートメーションの問題)が該当してそうな気がします。違うかも、ですが。。。

    ■ Windows7のOfficeサーバーサイドオートメーションで例外がスローされる - プログラマーな日々
    http://d.hatena.ne.jp/JHashimoto/20120615/1339731014
    ■ Office のサーバーサイド オートメーションについて
    http://support.microsoft.com/kb/257757/ja

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません