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";
}
Excel のファイル名の指定で、ドライブが抜けていますが、タスクスケジューラでは、カレントディレクトリの指定をしていますか?
データが置いてあるのが、D ドライブで、タスクは HOME がある C ドライブのディレクトリ、ってことじゃないかと、想像してます。
スクリプトでドライブレターを付けて Excel の Book を指定するか、タスクスケジューラの「プログラムの開始」で「開始(オプション)」で、カレントディレクトリに Excel Book があるディレクトリを指定すると、うまくいくんじゃないか、という気がします。
http://www.atmarkit.co.jp/fwin2k/win2ktips/1368taskw7/taskw7.html
UACを解除してみてください。
http://www.sakyou.com/ManualShop/Windows/05_UserAccount/08_UAC-OFF/17_Win7Pro/index.html
ありがとうございます。
上記のUAC解除をしてみましたが、うまくいきませんでした。
Excel のファイル名の指定で、ドライブが抜けていますが、タスクスケジューラでは、カレントディレクトリの指定をしていますか?
データが置いてあるのが、D ドライブで、タスクは HOME がある C ドライブのディレクトリ、ってことじゃないかと、想像してます。
スクリプトでドライブレターを付けて Excel の Book を指定するか、タスクスケジューラの「プログラムの開始」で「開始(オプション)」で、カレントディレクトリに Excel Book があるディレクトリを指定すると、うまくいくんじゃないか、という気がします。
http://www.atmarkit.co.jp/fwin2k/win2ktips/1368taskw7/taskw7.html
batを起動するタスクも,plを直接動かす方も同じユーザだったので、正直ここは普通に理詰めでやってたら気づかないですね。。
的外れな回答でしたが、解決のとっかかりくらいには、なれたようで、正直、ほっとしました (^^ゞ
batを起動するタスクも,plを直接動かす方も同じユーザだったので、正直ここは普通に理詰めでやってたら気づかないですね。。
2012/10/10 22:40:33的外れな回答でしたが、解決のとっかかりくらいには、なれたようで、正直、ほっとしました (^^ゞ
2012/10/10 23:21:51