人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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";
}


●質問者: studio2021
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● oil999
●10ポイント

UACを解除してみてください。
http://www.sakyou.com/ManualShop/Windows/05_UserAccount/08_UAC-OFF/17_Win7Pro/index.html


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

質問者から

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


2 ● a-kuma3
●190ポイント ベストアンサー

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


studio2021さんのコメント
データ側もCドライブで、script側もCドライブに移動しましたが、うまくいってない感じです。 $filename = 'C:\hogehoge.xlsx' my $book = $excel->Workbooks->Open({ 'FileName' => $filename, # 'Password' => '1', # 'ReadOnly' => 'True' }) or print OUT Win32::OLE->LastError(); 上記のような形で書きなおしエラーを出してみたところ下記のような形です。 OLE exception from "Microsoft Excel": ファイル 'C:\hogehoge.xlsx' にアクセスできません。次のいずれかの理由が考えられます。 ? ファイル名またはパスが存在しません。 ? ファイルが他のプログラムによって使用されています。 ? 保存しようとしているブックと同じ名前のブックが現在開かれています。 Win32::OLE(0.1709) error 0x800a03ec in METHOD/PROPERTYGET "Open"book ただのからのxlsxなのですが、タスクでやった場合のみうまくいかないようです。 普通に実行する分には大丈夫なのですが。。。 C:\直下にファイルもscriptもおいて、そこで、タスクを動かすなどもしましたがやはりだめでした。

a-kuma3さんのコメント
>> $filename = 'C:\hogehoge.xlsx' << これ、hogehoge.xlsx の前は¥がひとつですか? ¥(バックスラッシュ)で書くなら、ふたつ必要ではないかしら? >> $filename = 'C:\\hogehoge.xlsx' <<

a-kuma3さんのコメント
あ、ごめん。違うわ。 同じスクリプトが、タスク以外からでは動作するんでしたよねえ。

studio2021さんのコメント
そうですね。タスク以外からは動作します。ちょうど今いろいろ試していて解決したのですが、このpl自体は hogehoge.bat内で起動していて、その場合は動かなくて、直接plをタスクに入れた場合動くことを確認しました。この部分は問題に影響しないと思って、質問に書いてなかったのですが、ここが原因でした。ただhogehoge.bat内でplを起動させた場合、これが動かない理由はちょっとわかってないです。

studio2021さんのコメント
hogehoge.bat内で動かした場合、変数に入っているファイル名が何故かわたってなく、ファイルオープン時にエラーが出ているようです.

a-kuma3さんのコメント
うーん、最初に書いてもらってても、ぼくにはそれが原因だと看破はできなかったなあ。 環境変数が違うのかな、くらいしか思いつかないけど、そんなところの挙動を環境変数で変えられるんだろうか...

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

a-kuma3さんのコメント
的外れな回答でしたが、解決のとっかかりくらいには、なれたようで、正直、ほっとしました <tt>(^^ゞ</tt>
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ