EXCELファイルを別ファイルに保存する方法はありますか?

このQ&Aのポイント
  • activeperlを使用して、サーバ上のexcelファイルを名前を変更して別ファイルに保存する方法を教えてください。
  • Win32::OLEとMicrosoft Excelを使用して、EXCELファイルを別のファイルに保存する方法を教えてください。
  • PerlのCGIソースコードを使用して、EXCELファイルを別のファイルに保存する方法を教えてください。
回答を見る
  • ベストアンサー

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
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • venzou
  • ベストアンサー率71% (311/435)
回答No.3

#1,2です。 >Apatch 1.3.35 >IIS 大きな違いはこれでしょうか。 IISは使ったこと無いので、まったく分かりません。申し訳ないですが、私はここでリタイヤします。ごめんなさい。

tottaka
質問者

お礼

ありがとうございました。 調べてやってみます。

その他の回答 (2)

  • venzou
  • ベストアンサー率71% (311/435)
回答No.2

#1です。 >Perl スクリプトからだと問題ないのに CGI からこれを呼び出すと失敗しています。 CGIから呼び出してみましたが、正常に動きました。 プログラムではなく環境の問題みたいですね。 ちなみに、うちの環境 WindowsXP Home SP1 Apatch 1.3.35 ActivePerl 5.6.1 Excel 2000 SP3 PCは1台なので、ローカルのサーバでCGIを動かしました。 Excelに関して特別な設定をした覚えはありません。 そちらの環境は?

tottaka
質問者

補足

こちらの環境は WindowsXP Professional SP2 IIS ActivePerl ActivePerl 5.6.1 Excel2003 です。 こちらも1台で試験してるので、ローカルで動かしています。

  • venzou
  • ベストアンサー率71% (311/435)
回答No.1

うちの環境では、そのソースで動きましたが・・・ 何が問題なんでしょう? ファイルの内容を書き換えないなら、ファイルをコピーするだけでいいと思います。 例1 use File::Copy; copy('C:\Inetpub\excel\temp.xls', 'C:\Inetpub\excel\dest.xls'); 例2 open(IN,'C:\Inetpub\excel\temp.xls'); binmode IN; @buf = <IN>; close(IN); open(OUT,'> C:\Inetpub\excel\dest.xls'); binmode OUT; print OUT @buf; close(OUT);

tottaka
質問者

補足

さっそく回答ありがとうございます。 Perl スクリプトからだと問題ないのに CGI からこれを呼び出すと失敗しています。 今後、ファイルの内容も書きかえれるようにしたいので、use Win32::OLEを使用してやったのですが。。。 my $excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit') || die "Excelが起動できません。"; この辺りでエラーが出ているみたいです。 Excelにアクセスする時の権限とかあるのでしょうか?

関連するQ&A

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

    取り込んだセルのデータを使いたいのですが。。。 特定のセルの指定方法がわるのでしょか? ここが悪いと思ってますが、 ↓ 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からの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; 恐れ入りますが、ご回答を宜しくお願いします。

  • アクティブウィンドウから 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
  • 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がエラー

    テキストを読んで既存のExcelに書き込む処理をしています。 実行時に「perl ruiseki2.pl 0528 42 49 200705」の様にパラメータ を指定して実行すると Win32::OLE(0.1701) error 0x800a03ec in METHOD/PROPERTYGET "Cells" at ruiseki2.pl line 382 Can't use an undefined value as a HASH reference at ruiseki2.pl line 382. の様なエラーが表示されます。 第二パラメータのみ、使用せずにプログラムで直接値をセットする と正常に処理されるのですが、パラメータの指定や使用方法に問題 があるのでしょうか?ご存知の方がいらっしゃいましたらお教え下 さい。下記がソースです。 #第二パラメータを変数にセット。ここは正常にセットされます。 $wk_i = $ARGV[1]; use Win32::OLE; eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')}; die "Excel not installed" if $@; unless (defined $ex) { $ex = Win32::OLE->new('Excel.Application',sub {$_[0]->Quit;}) or die "Oops,cannot start Excel"; } $book = $ex->Workbooks->Open('C:/データ/レポートチェック'.$ARGV[3].'.xls'); $sheet = $book->Worksheets(1); ※エラー箇所(382行目) $sheet->Cells(3,$wk_i)->{Value} = $aaa; $book->SaveAs( 'C:/データ/レポートチェック'.$ARGV[3].'.xls' ); undef $book; undef $ex;

    • ベストアンサー
    • Perl
  • Perl でワードファイルのヘッダーを取得する

    Perl でワードファイルのヘッダーを取得するには? perl, v5.10.0 windowsXP ワードファイル:word2003 <行いたいこと> C:\temp\word.doc のワードファイルのヘッダー(複数行)を取得したい。 <状況> インターネットでワードファイルの本文は取得できる例がありましたが、 ヘッダーを取得する方法がわかりませんでした。 下記のプログラムでは ・ワードのヘッダーは 0 が表示される。 ・ワードの本文は取得できて表示される。 (ヘッダーを表示しようといろいろしてみましたが、できていません) よろしくお願いいたします。 <プログラム> use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Word'; my $word = Win32::OLE->GetActiveObject('Word.Application') || Win32::OLE->new('Word.Application', 'Quit') || die; # 読み込み my $doc = $word->Documents->Open('C:\temp\word.doc') || die; my $headers = $doc ->ActiveWindow->ActivePane->View->{SeekView} = wdSeekCurrentPageHeader; ########## ヘッダー取得(→うまくいかない)########## print "$headers->{SelectionTypeText}\n"; #null foreach (in $headers) { print $_->{SelectionTypeText}->{'Text'} . "\n"; #null print $_ . "\n"; #0 print $_->{'Text'} . "\n"; #null print $headers . "\n"; #0 } ########## 本文取得(→OK)########## my $paras = $doc->Paragraphs; foreach (in $paras) { print $_->Range->{'Text'} . "\n"; } $doc->Close();

  • PerlでMAPIについて

    WindowsのActivePerl5.6を使っています。 OutlookExpressの受信フォルダ内のメールを処理する Perlスクリプトを書こうしていますが、つまずいています。 my $Outlook = Win32::OLE->GetActiveObject('Outlook.Application') or die "なぜかエラー"; ここでエラーが発生します。 また、OutlookExpressの受信フォルダのメールのヘッダやメッセージを読む参考になるスクリプトはありますか?

    • ベストアンサー
    • Perl
  • エクセルでファイル保存が出来ない…

    始めまして。 エクセル2000で作成したファイルを エクセル2002で開きました。 そのまま上書き保存をしたいのですが 数人と共有する為、保存形式を下記のようにしたいと 思っています。 Microsoft Excel 97-2002および5.0/95ブック(*.xls) ところが、2002で開いていると保存の際に 「ファイルが保存できません」と出てしまいます。 名前を変えてみてもダメで、 保存形式を Microsoft Excelブック(*.xls) にしてみてもダメでした。 元々作成した時のPCがエクセル2000だったので 新しい機能があるため保存出来ない…とかでは なさそうなのですが…。 ちなみにファイルの中には 複数のマクロが組まれています。 (データをクリアして新しく計算式を貼り付ける等) マクロを組む事で何か原因があるのでしょうか。 皆様の知恵をお貸し下さい。宜しくお願いします。

  • VBでパスワードがかかったエクセルを開くには?

    VisualStudio2015で見よう見まねでVBのプログラムを作成している初心者です。 パスワードのかかったエクセルファイルを開きたく、以下を作成しました。 Dim Application01 As New Excel.Application() Dim Book01 As Excel.Workbooks Book01 = Application01.Workbooks Book01.Open("C:\temp\test.xls",,,, "password") この場合は開くのですが、ファイルが以下の様にネットワークドライブになると開いてくれません。 Book01.Open("\\共有ドライブ\temp\test.xls",,,, "password") 以下の場合は開く(当然パスワードの入力は求められますが)ので、 パスが間違えているわけではありません。 System.Diagnostics.Process.Start("\\共有ドライブ\temp\test.xls") なにかネットワークドライブ向けのパスの記載の仕方など決まり事があるのでしょうか?

専門家に質問してみよう