• 締切済み

初心者に救いの手を

perlを覚えてみようと思い立ち55歳で始めて見ました。 エクセルを操作しようと思い、 use Win32::OLE; と入れるとエラーになります。それ以外のコードは動いています。 さくらインターネットのレンタルサーバーを利用していますが、何か関係ありますか? ホームページで調べてもActivePerlをインストールすれば自動的に含まれているとなっていますが?何か大きな勘違いをしているのでしょうか? よろしくお願いします。

  • Perl
  • 回答数2
  • ありがとう数4

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

さくらインターネットのサーバーはWindowsとは違うOSが使われています。 Windowsではないので、Windowsの機能であるWin32::OLEも使えません。 ActivePerlはWindows上で動作するPerlです。 インストール先はそのお手元のパソコンです。サーバー上では動作しません。 例えば、コマンドプロンプトから perl スクリプト名 と入力する、等の方法で実行します。

super_su2010
質問者

お礼

ありがとうございます。 それはそうですよね。別の方法を考えて見ます。

回答No.1

> さくらインターネットのレンタルサーバーを利用していますが、何か関係ありますか? そのコードはサーバ上で動かそうとしていますか? それとも、ローカルのPC上で動かそうとしていますか? > ホームページで調べてもActivePerlをインストールすれば自動的に含まれているとなっていますが? モジュールが入っていないかもしれないので ActivePerl だとppmで確認して下さい。また、Win32:OLEでエクセルファイルを操作するには、PCがWindowsでエクセルが入っている必要があります。

super_su2010
質問者

補足

早速の回答ありがとうございます。言葉足らずですいません。 サーバー上での問題です。ローカルPC上ではちゃんと動作しました。

関連するQ&A

  • perlからのexcel読み込み

    お世話になります。 win7 ActivePerl 5.16.3 Apache HTTP Server 2.0 perlからエクセルファイルを読み込むプログラムを作成しています。 ---- use Win32::OLE; use Win32::OLE::Const 'Microsoft Excel'; Win32::OLE->Option(Warn => 3); eval{ Win32::OLE->GetActiveObject('Excel.Application'); }; if($@){ die "Excelが使用できません。$@"; } unless (defined $Excel){ $Excel = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;}) or die "Excelが起動できません。"; } my $Book = $Excel->Workbooks->Open("Excelファイルのフルパス") or die Win32::OLE->LastError(); $Book->Close; $Excel->Quit(); ---- 現在は単純に、開いて、閉じるだけの状態です。 ワークシートが1つのエクセルファイルは問題ないのですが、 2つ以上ワークシートがあるエクセルファイルを開くと、$Book->Closeのところで戻ってこなくなります。(ブラウザで待機中の状態) 該当のエクセルファイルは、開いた状態です(直接エクセルで開いてみると編集のためロックされていますと出る)ので、Openは出来ているような気がします。 $Book->Closeを書かなければ下に流れていきますが、 プロセスが残ってしまいます。 ワークシートが1つのときと、複数のときで違いがあるのでしょうか?

    • ベストアンサー
    • Perl
  • perlでExcelを開くと強制終了してしまう

    activeperlでExcelのファイル(200ファイル位)を1ファイルずつ開いて、特定のセルの値を取得して、テキストファイルに出力をしています。 Excelファイルをオープンするときに、以下のエラーが表示されて、perlが強制終了してしまいます。 Can't call method "Worksheets" on an undefined value at hogehoge.pl line 143. 以下は問題の143行目 141 my $excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); 142 my $book = $excel->Workbooks->Open($fp); 143 my $sheet = $book->Worksheets(2); 現象としては、 Excelのファイル(200ファイル位)の特定のファイルで強制終了するわけではない。 よって、全てのファイルを正常に読み込んで終了する場合もある。 対策としては以下を実行していますが、あまり効果はないような感じです。 メモリを増強 1GB→2GB perlでExcelを処理中は他の動作をさせない(例えば、メールソフトを終了させておく) このエラーを回避する方法はあるものなのでしょうか? 完全に回避ができなくても、強制終了することなく、続行してくれるだけでも大変助かります。 以下に実行環境を記載します。 WindowsVista Business Service Pack 2 Intel Pentimum4 3GHz memory 2GB activeperl v5.10.1 Binary bulid 1006 perlでの使用モジュール use File::Find; use File::Basename; use File::Copy; use Date::Simple; use Cwd; use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; use Win32::OLE::Variant; use utf8; use Encode; use File::Copy; use File::Path; 恐れ入りますが、ご回答を宜しくお願いします。

  • Linuxでブラウザを開くスクリプトを書くには?

    WindowsでPerlからブラウザを開くスクリプトは以下の様にすれば実現できますが、Linuxの場合は、どのようにしたら良いのでしょうか? ブラウザは、Mozila5.0です。 あと、Linuxでは、use Encodingを使うとそのようなモジュールは無いと怒られます。ActivePerl特有のモジュールでしょうか?perlは共に5.8を使っています。 #use Encoding; use Win32::OLE; # オブジェクト生成。 my $ie = Win32::OLE->GetActiveObject('InternetExplorer.Application') || Win32::OLE->new('InternetExplorer.Application',sub {shift->Quit}) || die "InternetExplorer: ".Win32::OLE->LastError; $ie->{Visible} = 1; # Visibleに(見えるように)する。 # リクエストを投げてみる。 $ie->Navigate("http://www.yahoo.co.jp/"); while($ie->Busy){sleep 1; } # 待ちの秒数は適当

    • ベストアンサー
    • Perl
  • EXCELのファイルを別ファイルに保存する

    activeperlを使って、サーバ上のexcelファイルを名前を変更して、 別ファイルに保存したいですが、いい方法はありますでしょうか? 今作成したcgiのソースは下記です。 use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; my $excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit') || die "Excelが起動できません。"; my $book = $excel->Workbooks->Open('c:\Inetpub\excel\temp.xls') || die; my $sheet = $book->Worksheets('temp') || die; $book->SaveAs('C:\Inetpub\\excel\dest.xls'); $book->Close(); よろしくお願いします。

    • ベストアンサー
    • CGI
  • アクティブウィンドウから URL/HTML の取得

    ローカルの(WindowsXP)環境で、アクティブなエクスプローラのウィンドウから URL や HTML を、 Perl (ActivePerl) でそのプログラム中に取り込むにはどのようにしたらよいのでしょうか。LWP, Win32::OLE などウェブで調べてみましたがわかりませんでした。ご教示いただけたら嬉しいです。 調べた限りでは Win32::OLE で以下のように出来そうだったのですがうまく行きませんでした。 use Win32::OLE qw(EVENTS in with valof); my $IE = Win32::OLE->GetActiveObject('InternetExplorer.Application') || Win32::OLE->new('InternetExplorer.Application', 'Quit'); $url = $IE->{Document}->{Url}; print "URL: " . $url . "\n";

    • ベストアンサー
    • Perl
  • Win32::OLE で Excel のウィンドウ枠固定

    Ver は Perl 5.8 で、 今 Win32::OLE を利用して、Excel ファイルの操作をする スクリプトを書いています。 VBA で書けば以下の様に「ウィンドウ枠の固定」ができるのですが、 これを Win32::OLE を使った場合はどのような記述になるのかが 分からなくて困っています。 With ActiveWindow .SplitColumn = 1 .SplitRow = 1 .FreezePanes = True End With よろしくお願いします。

  • エクセルのセルからのデータ取り込み

    取り込んだセルのデータを使いたいのですが。。。 特定のセルの指定方法がわるのでしょか? ここが悪いと思ってますが、 ↓ print "$arrary[0][0]\n"; -------------------------------------------------------------- use strict; use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; $Win32::OLE::Warn = 3; # die on errors... my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); # get already active Excel # application or open new my $Book = $Excel->Workbooks->Open("C:\\DOCUMENTS\\test.xls"); # Excelのファイルをオープン my $Sheet = $Book->Worksheets(1); # ワークシート1を選択 my $array = $Sheet->Range("A8:B9")->{'Value'}; # 中身を取り出す $Book->Close; print "$arrary[0][0]\n";

  • Perl Win32::MsgBoxについての質問

    使用環境 Apache HTTP Server 2.2(win32) OS:Win7 Perl : ActivePerl-5.14.2.1402-MSWin32-x86-295342 msg.plソースコード #!c:/perl/bin/perl.exe use Win32; Win32::MsgBox("Hello world!!", 1); $ret = Win32::MsgBox("保存しますか?", 3 | MB_ICONEXCLAMATION, "確認"); exeit; 上記スクリプトは、確かにコマンドプロンプトからは実行できるのですが、これを以下のようにWEBからアクセスできないのでしょうか? http://****.******.**/cgi-bin/msg.pl 同様に以下のスクリプトも、上記のようにしてアクセスしたいのですが.... use Win32::Sound; Win32::Sound::Volume('100%'); Win32::Sound::Play("C:/Windows/Media/tada.wav"); Win32::Sound::Stop(); 思うに、この二つのモジュールが、コマンドプロンプトからだけでしか実行できないのであれば、この利用価値はどこにあるのでしょうか?(私としてはCGI,SSIとして動かしたいのですが...)よろしくお願いします。

  • Perl MSSQLに接続してSQLのVer情報を

    すみません。素人です。 Perl MSSQLに接続してSQLのバージョン情報を取得したいです。 コードを実行すると下のようなエラーが発生します。 Can't use string ("1") as a HASH ref while "strict refs" in use at C:\testPerl\test.pl SQLServer Mangement Studioでクエリー(select @@VERSION)を実行すると下のような情報を取得できます。 ******** (列名なし) Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Workgroup Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1) ********* どうも取得したデータ構造の指定がまずいように思いますが、どうすれば取得できますでしょうか? コード ------------------- use strict; use warnings; use Data::Dumper; use Win32::OLE; use Data::Dumper::Concise; use Win32::OLE::variant; use Win32::OLE::Const 'Microsoft ActiveX Data Objects 2.0 Library'; # DBサーバー名とDB名設定 my $server = "localhost"; my $db = ""; my $id = "sa"; my $ps = "testSa"; # エラー時に本処理を中止し、Perlがエラーメッセージを出力し、本プロセスが終了する。 Win32::OLE->Option(Warn => 3); # SQL Server 認証設定 my $connStr = "Provider=sqloledb;". "Data Source=$server;". "Initial Catalog=$db;". "User ID=$id;". "Password=$ps;"; # DB接続 my $objDB = Win32::OLE->new("ADODB.Connection"); $objDB->Open($connStr); $objDB->{Errors}->{Count} and die "cannot connect '$connStr'"; my $rs = Win32::OLE->new("ADODB.Recordset"); $rs->Open("select \@\@VERSION", $objDB); print "取りあえずなんか出力しようと試みる----------1\n"; print "$rs->{Fields}"."\n"; print "$rs->{Fields}->{Count}"."\n"; print "$rs->{Fields}->{Count}->{Item}->{1}"."\n"; while(!$rs->EOF ){ print "$rs->{Fields}->{Count}->{Value}"."$rs->{Fields}->{Item}->{Value}\n"; $rs->MoveNext(); } print "取りあえずなんか出力しようと試みる----------1\n"; ## DB切断 $objDB->Close();

  • cocoa framework,Objective-Cが使えるレンタル

    cocoa framework,Objective-Cが使えるレンタルサーバーってありますか? 今は、さくらインターネットを借りてるのですが、Objectiv-Cで書いたコードはコンパイルできませんでした。 さくらインターネットのような、ごく普通のレンタルサーバでcocoa framework,Objective-Cが使える様にする方法が あるのなら、その方法でもかまいません。 宜しくお願いいたします。