• ベストアンサー

Perl で Excel ファイルに書き込む法

csv ファイルではなく、xls ファイルを、perl で読み 書き可能でしょうか? OS は Windows2000 です。 Win32::OLEモジュール を使えば出来そうなHPを見かけ ましたが、perl についても詳しくない為、まぶたが落ちる ほど難解でした。 できる限りシンプルな方法で実現できたらと思います。

  • yasu
  • お礼率79% (173/218)
  • CGI
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • FRE
  • ベストアンサー率90% (10/11)
回答No.2

ActivePerlを御使用なら、出来ますよ。 例えば、こんな感じでしょう。 ※マクロの知識は必須ですね。 # ---------------------------------------- use Win32::OLE; use Win32::OLE::Const 'Microsoft Excel'; my $Excel = Win32::OLE->new("Excel.Application"); $Excel->{Visible} = 1; my $Book = $Excel->Workbooks->Add; my $Sheet = $Book->Worksheets(1); my $Range = $Sheet->Range("A2:C7"); $Range->{Value} = [['Delivered', 'En route', 'To be shipped'], [504, 102, 86], [670, 150, 174], [891, 261, 201], [1274, 471, 321], [1563, 536, 241]]; my $Chart = $Excel->Charts->Add; $Chart->{ChartType} = xlAreaStacked; $Chart->SetSourceData({Source => $Range, PlotBy => xlColumns}); $Chart->{HasTitle} = 1; $Chart->ChartTitle->{Text} = "Items delivered, en route and to be shipped"; # ---------------------------------------- その他、いろいろな物が起動できます。 ActivePerlは、無料で使用できます。 URLをあげておきますね。 インストール後に、画面左下「スタート」 ->  「プログラム」 からたどれるところにヘルプ用の HTMLが入りますが、そこの、 「ActivePerl FAQ」-> 「Windows Specifics」-> 「Using OLE with Perl」 にサンプルがあります。

参考URL:
http://www.activestate.com/
yasu
質問者

お礼

ご親切にスクリプトまで掲載していただき ありがとうございます。 利用させていただきます。

その他の回答 (1)

  • mnabe
  • ベストアンサー率33% (427/1283)
回答No.1

 貴方が、Perl以外の言語知っていて、Windowsプログラムの経験があるのなら、  その言語で、EXCELファイルを操作するプログラムを作成して、引数としてデータを受け渡す様にすれば、簡単に出来ると思います。    その後、Perlから作成したプログラムを呼んであげればOKです。  個人的には、Windows2000を使用するのなら、IISにしてASPでオブジェクト操作する方が簡単で素敵だと思いますけどね。  .netでよければもっと楽(^^;

yasu
質問者

お礼

アドバイスありがとうございます。 ASPは最終手段として考えていました。 しかし、今回は諸事情により、CGIでなるべくいきたい ところなのです。 Spreadsheet-WriteExcel とかいうモジュールもあり ましたが、これまたインストールも満足にできません。。 Win32::OLE ともども、もう少しわかりやすいHPとか あればいいのですが・・・・

関連するQ&A

  • Perlについて教えてください。

    Perlについて教えてください。 私はPerl、Linux(FreeBSD,CentOS)について初心者の為よくわからないので2点質問させてください。 ネットでPerlについて調べたところ 1. WindowsでのPerl開発 = Active Perl(ActiveState社) WindowsでのPerl開発 = OSに最初から組み込まれているもの(違っていたらすみません) との記述がありますが、ActiveState社のHPに行くとWindows,Mac,Linux,SunのActive Perl がありますがActive PerlはそれそれのOSで同じソースががつかえるのでしょうか? 2. Windows XPにActive Perlをインストールしたところ「Perl package Manager」もインストール されていたので、起動してみるとインストールされている(インストールできる)PPMが表示されますが PPM(Perl Package Modeule)=Win32用Perlモジュール CPANのPerlモジュール=Linux用のPerlモジュールと考えていたのですが 両方とも表示されています。 CPANで入手できるPerlモジュールはWindows環境下のActive Perlでもしようできるのですか? 馬鹿な質問と思うのかもしれませんが是非教えてください。

    • ベストアンサー
    • Perl
  • Perlでエクセルの「名前をつけて保存」ダイアログを表示する方法を教えてください

    PerlのWin32::OLEモジュールを使用してMS-Excelファイルを作成しています。 作成したExcelファイルを $book->SaveAs("ファイル名");のように記述して保存はできるのですが、 「名前を付けて保存」ダイアログボックスを表示して保存先を指定できるようにしたいのですが可能でしょうか? VBAでは、「Application.GetSaveAsFilename」で表示できるようですが、PerlのWin32::OLEモジュールでも同じように表示出来ないでしょうか?

  • PerlでExcelのワークシートを同じファイル内にコピーしたりワーク

    PerlでExcelのワークシートを同じファイル内にコピーしたりワークシートの名前を変更することは可能でしょうか? 環境は、WindowsXPpro、IIS5.1、PerlV5.10でWin32_OLEモジュールを使用しています PerlでExcelのワークシート内セルに書き込み・セルからの読み出しはできています。 VBAではワークシートをコピーする場合は、 「Worksheets("Sheet1").Copy After:=Worksheets("Sheet3")」 でコピーできるようですが、 Perlではどう記述すれば良いか分かりません。 Perlではワークシートをコピーしたりワークシートの名前を変更することは出来ないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • Excel2010のファイル保存形式について

    誤字がったので質問しなおします。 会社でExcel2010を使用しています。 OSはWinodws7です。 今まで「名前をつけて保存」しようとすると、 「ファイルの種類」というところに、プルダウンでいくつも選択肢がありました。 自分は自宅のofficeが2003なので「Excel 97-2003ブック(*xls)」(だったと思います。)で保存していたのですが、 急に「ファイルの種類」が「Excelファイル(*xls)(*xls)」「テキストファイル(*txt)」「CSVファイル(*.csv;*.*)」の3種類しか出なくなってしまいました。 ただこのまま「.xls」で保存すると今度開くときに 「開こうとしているファイルは、実際にはその拡張子が示すファイル形式ではありません。このファイルを開く前に、ファイルが破損していないこと、信頼できる発行元からのファイルであることを確認してください。ファイルを今すぐ開きますか?」と表示されます。 これはなぜでしょうか? 拡張子を手動で「.xlsx」に変更すると開くことができます。 ただ「.xlsx」だと自宅の2003では開かないし、「.xls」のままでも2003では開きません。 思うに、拡張子は「.xls」になっていても「.xlsx」形式で保存されているような気がするのですが。。。 どなたか現状を修復し、従来通り正しい2003形式で保存する方法を教えていただけないでしょうか。

  • PerlでCSVファイルからRSS対応のXMLファイル(UTF-8フォーマット)を作成する方法を教えて下さい。

    初めてOKWebを使わせて頂きます。よろしくお願い致します。 社内でホームページを作成しており、新着情報などはCSVファイル(日付、タイトル、内容、URLなどが一行に記載されたもの)を元にPerlプログラムでホームページに表示するようにしています。 このCSVファイルを使って、RSS対応のXMLファイルを生成したくPerlでCSVファイルからXMLファイルを作成するプログラムを記述してみたのですが、作成後、UTF-8フォーマットでファイルを保存する方法がわかりません(現在はShift-JISになっていると思います)。 ファイルをUTF-8に変換し保存するPerlの記述方法がわかりましたらお教えください。 尚、環境は以下となります。 OS:Windows2000Server Web:IIS5.0 ソフト:ActivePerl5.6 他の人が作ったPerlプログラムもあり、できればこの環境(Versionなど)は変えずできると嬉しいです。Perl初心者ですので、できれば具体的な記述方法をお教え頂ければとても助かります。申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • Perl
  • perl ファイルが開かない

    perl でファイルを開きたいのですが、なぜか開けません。何がいけないのでしょうか?エラーは、 Name "main::file" used only once: possible typo とでます。エラーを見るかぎり、コードに間違いはなく、apacheかOSに何か原因があるのではないかとおもうのですが、悩んでいます。OSはubuntuです。 #!/usr/bin/perl -w open (IN, "<test.txt") or die ("Could not open $file: $!"); while(<IN>) { print "$_"; } close (IN);

  • perl初心者です。

    すみません、xmlファイルからCSVファイルに変換するプログラムを作成しなくてはいけないのですが、 perlを1からあまり書いた事がないので イメージがわきません。 何か参考になるページをネットで探してるのですが、 どなたか参考になりそうなHPをご存じでしたら URLを教えていただけると助かります。

    • ベストアンサー
    • Perl
  • perlでのcsvファイルの比較・上書き

    はじめまして、今回初めて質問させていただきます。 今、perlでAとBという2つのCSVファイルを比較して、マッチしない箇所がある場合はAの情報がBに上書きされるというスクリプトを作成しようとしています。 OPEN関数と比較演算子を利用するのはわかっているのですが、上書きさせる方法がわかりません... ネットで調べたりしたのですが、参考になるHPがなかなか見つからなかったので、こちらに質問させていただきました。 サンプルとなるプログラムやHP等を教えていただければ、勉強になりますのでとても助かります。 よろしくお願いします。 追記 Bのcsvファイルには住所録情報が格納されておりまして、AのcsvファイルにはBの住所録情報の中から変更箇所がある新しい住所録情報が格納されております。

  • Excel2000でHTMLファイル開くとフリーズ

    Excel2000でHTMLファイルを開こうとすると、ステータスバーの「開いています」の横のインジケータが途中で止まり、[応答なし]の状態になってしまいます。この時、Excel[応答なし]の状態でも、他のソフトは使用可能です。現象発生前(数日前)は、同操作をしても問題なく処理できました。Excelファイル(.xls)やCSVファイルは、問題なく開くことができます。対策としてOffice2000を再インストールしてみましたが、改善されまませんでした。OSはWindows98SE、RAMは192MB、常駐ソフトは最低限にしています。解決法をご指導願います。

  • perlでpostgresを使えるようにしたい

    今までwindows2000でperl5.6とpostgresでDBIの構築をしていました。 昨今のセキュリティ事情を鑑みて、windowsXPにOSを入れなおし、Perlも5.10.0.1005にし、posgresも8.4.0にしようと思い立ちました。 perlはActivePerlです。 ActivePerlもpostgresもインストールしました。 ネットで検索したところ両者をつなぐにはDBIのモジュールが必要だとありました。 (2000の時は会社の人からファイルをもらってコピーしたので何も考えなくてもできました。その人とも疎遠になってしまって質問もできない状態です) モジュールを入れようと、binフォルダにあるppmをコマンドプロンプトから叩くと、エラーが出ます。 ppm gui failed: DBI connect('dbname=C:\DOCUME~1\ランカ~1\LOCALS~1\APPLIC~1/ActiveState/ActivePerl//ppm-MSWin32-x86-multi-thread-5_8.db','',...) failed: unable to open database file というエラーです。 すでにどこから手をつけていいのか、何をまずすべきかがわからなくなってしまいました。 ご教授いただければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Perl