- ベストアンサー
perlからのexcel読み込み
- perlからエクセルファイルの読み込みについてのプログラムを作成しています。現在、複数のワークシートがあるエクセルファイルを開くとエラーが発生します。
- Win32::OLEを使用してperlからエクセルファイルを読み込むプログラムを作成しています。しかし、複数のワークシートがあるエクセルファイルを開くとプログラムが応答しなくなります。
- perlでエクセルファイルを読み込むプログラムを作成しています。複数のワークシートがあるエクセルファイルを開くとプロセスが残ってしまい、プログラムが終了しません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
間が空いてしまってすいません ご質問に開いて閉じると書いてあったので画面上の話かと思いました ファイルのopen/closeの話だったんですね 失礼いたしました Webで利用するCSV変換ということで Excel2003までなら「Spreadsheet::ParseExcel」 Excel2007なら「Spreadsheet::XLSX」 をcpanからダウンロードして利用するとよいと思います とくに前者はサンプルが充実していて大変参考になります 後者も使い方がシンプルでCPANのサイトの紹介コードで充分理解できます どちらもPurePerlなので、サーバのPerlモジュールとしてビルド・インストールしなくても「use lib」で簡単に扱えるのが特徴です 数年前に実際に使ったことがありますが、シートが複数でも問題無かったうえにレンタルサーバ上でも動作しました
その他の回答 (2)
- ralf124c
- ベストアンサー率52% (232/446)
少し誤解があるようですので追補させて下さい > windowsで動作すればよいとのことから 今、あなたが動作させているのは決してWindowsというプラットホームではありません ネット(この場合loopbackというやつ)とHTTP(俗にWebとかインターネットとか言われてる)を介してApacheサーバのWindows上で動作させているのです ここでいうところの「Windowsで」というのは、察するにperl環境なのでアイコン(拡張子PL)をダブルクリックまたはコマンドプロンプトからのコマンドラインによるPerlスクリプトの実行となるんじゃないでしょうか? > win32 OLEを使用しましたが、ParseExcelであれば問題ないのですね。 ケースバイケースです 普通に実行するだけならWin32 OLEでも問題ありません Win32 OLEで作られたプログラムを普通とは違うやり方で実行されているのが問題なのです Wordやパワポをブラウザ経由で起動して使ったりはしないでしょう?(あ、最近ではそんなサービスアプリもありますね → ネットリソースの無駄遣いってやつ) 長々と失礼いたしました
お礼
色々とありがとうございます。 実行は、ブラウザを利用しています。 さまざまな書式のファイル(エクセルやテキストファイル)を読み込んで、 統一した書式のcsvを作り出すプログラムとなります。 ブラウザでエクセル起動(表示?)等はせず、 ファイル名、その他の設定をして、実行します。 プログラムは、ファイルがエクセルファイルなのか、テキストファイルなのかを認識し、 読み込み、書式を変更してcsvファイルを書きだします。 すでにプログラムは出来ている状態なのですが、ワークシートが複数のエクセルの場合にのみ 戻ってこなくなるので、その部分の修正なのですが、 作り自体を見直す必要があるのですね。
- ralf124c
- ベストアンサー率52% (232/446)
ApacheからCGI経由で「サーバ上画面」に「Excel開く」ことに何の意味があるのかよくわかりません 見かけ上ローカルでやってるつもりかもしれませんが、機器やアプリ構成そのものをじっくり考えてください 無意味に仲介しているApacheが空しいです ブラウザやApache・CGIを介さずそのまま実行してやればちゃんと動きませんか? Perlは本来システム保守用に開発された言語ですのでCGIだけがPerlじゃありません またCGI経由でExcelデータをコントロールするなら Spreadsheet::ParseExcel Spreadsheet::WriteExcel あたりを使ってブラウザ外の画面上には風呂敷広げないのが普通かと思います
お礼
アドバイスありがとうございます。 今回は、色々なフォーマットのエクセルファイルを読み込み、一定の書式のcsvとして出力するものを作成しています。 windowsで動作すればよいとのことから win32 OLEを使用しましたが、ParseExcelであれば問題ないのですね。 そちらでも試してみたいと思います。
お礼
何度もアドバイスを本当にありがとうございました。 こちらもお返事が遅れてしまい、大変失礼いたしました。 現在、教えて頂いたParseExcel、XLSXを試しているところです。 結局自分の行った初期の方法では、複数シートのときの問題は解決できておらず、 強引な手法なのですが…必要なシートのみにして(使用しないシートを削除) 処理を行うという方法しか見つけられませんでした。 これではすっきりしないというか怖いというか、 根本的な解決になっていない気がするので、教えて頂いた方法で作り変えようとしています。 こちらの質問の仕方も誤解を招く表現ばかりで申し訳ありませんでした。 最後までアドバイス頂き、とても感謝しております。 ありがとうございました。