お世話になります。
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つのときと、複数のときで違いがあるのでしょうか?
No.3ベストアンサー
- 回答日時:
間が空いてしまってすいません
ご質問に開いて閉じると書いてあったので画面上の話かと思いました
ファイルのopen/closeの話だったんですね
失礼いたしました
Webで利用するCSV変換ということで
Excel2003までなら「Spreadsheet::ParseExcel」
Excel2007なら「Spreadsheet::XLSX」
をcpanからダウンロードして利用するとよいと思います
とくに前者はサンプルが充実していて大変参考になります
後者も使い方がシンプルでCPANのサイトの紹介コードで充分理解できます
どちらもPurePerlなので、サーバのPerlモジュールとしてビルド・インストールしなくても「use lib」で簡単に扱えるのが特徴です
数年前に実際に使ったことがありますが、シートが複数でも問題無かったうえにレンタルサーバ上でも動作しました
何度もアドバイスを本当にありがとうございました。
こちらもお返事が遅れてしまい、大変失礼いたしました。
現在、教えて頂いたParseExcel、XLSXを試しているところです。
結局自分の行った初期の方法では、複数シートのときの問題は解決できておらず、
強引な手法なのですが…必要なシートのみにして(使用しないシートを削除)
処理を行うという方法しか見つけられませんでした。
これではすっきりしないというか怖いというか、
根本的な解決になっていない気がするので、教えて頂いた方法で作り変えようとしています。
こちらの質問の仕方も誤解を招く表現ばかりで申し訳ありませんでした。
最後までアドバイス頂き、とても感謝しております。
ありがとうございました。
No.2
- 回答日時:
少し誤解があるようですので追補させて下さい
> windowsで動作すればよいとのことから
今、あなたが動作させているのは決してWindowsというプラットホームではありません
ネット(この場合loopbackというやつ)とHTTP(俗にWebとかインターネットとか言われてる)を介してApacheサーバのWindows上で動作させているのです
ここでいうところの「Windowsで」というのは、察するにperl環境なのでアイコン(拡張子PL)をダブルクリックまたはコマンドプロンプトからのコマンドラインによるPerlスクリプトの実行となるんじゃないでしょうか?
> win32 OLEを使用しましたが、ParseExcelであれば問題ないのですね。
ケースバイケースです
普通に実行するだけならWin32 OLEでも問題ありません
Win32 OLEで作られたプログラムを普通とは違うやり方で実行されているのが問題なのです
Wordやパワポをブラウザ経由で起動して使ったりはしないでしょう?(あ、最近ではそんなサービスアプリもありますね → ネットリソースの無駄遣いってやつ)
長々と失礼いたしました
色々とありがとうございます。
実行は、ブラウザを利用しています。
さまざまな書式のファイル(エクセルやテキストファイル)を読み込んで、
統一した書式のcsvを作り出すプログラムとなります。
ブラウザでエクセル起動(表示?)等はせず、
ファイル名、その他の設定をして、実行します。
プログラムは、ファイルがエクセルファイルなのか、テキストファイルなのかを認識し、
読み込み、書式を変更してcsvファイルを書きだします。
すでにプログラムは出来ている状態なのですが、ワークシートが複数のエクセルの場合にのみ
戻ってこなくなるので、その部分の修正なのですが、
作り自体を見直す必要があるのですね。
No.1
- 回答日時:
ApacheからCGI経由で「サーバ上画面」に「Excel開く」ことに何の意味があるのかよくわかりません
見かけ上ローカルでやってるつもりかもしれませんが、機器やアプリ構成そのものをじっくり考えてください
無意味に仲介しているApacheが空しいです
ブラウザやApache・CGIを介さずそのまま実行してやればちゃんと動きませんか?
Perlは本来システム保守用に開発された言語ですのでCGIだけがPerlじゃありません
またCGI経由でExcelデータをコントロールするなら
Spreadsheet::ParseExcel
Spreadsheet::WriteExcel
あたりを使ってブラウザ外の画面上には風呂敷広げないのが普通かと思います
アドバイスありがとうございます。
今回は、色々なフォーマットのエクセルファイルを読み込み、一定の書式のcsvとして出力するものを作成しています。
windowsで動作すればよいとのことから
win32 OLEを使用しましたが、ParseExcelであれば問題ないのですね。
そちらでも試してみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- PostgreSQL ポストグレにあるExcelファイルを開くには 1 2022/12/13 18:07
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) モードレスでユーザーフォームが開け(表示)ません。 4 2022/09/09 11:05
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Visual Basic(VBA) Outlook VBAについて 1 2023/07/10 12:41
- その他(パソコン・スマホ・電化製品) CMD等でPC操作(excel開く等)を自動化させたい 1 2023/03/15 09:53
- Excel(エクセル) csvファイルをExcel形式で読み込むには 2 2023/07/03 13:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlのローカルプログラムでデ...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
ReadLineでの読み出し行を指定する
-
batファイルでrenameができませ...
-
window.open でのファイル指定方法
-
openした後、closeしないでプロ...
-
Windowsで複数のファイルを同じ...
-
バッチファイルの作り方(CSV→...
-
巨大なテキストの最終行を取得...
-
microsoft multimedia control ...
-
Edge スクレイピング
-
perlで複数行のデータを自由に...
-
sprintfについて
-
JavaでCSVファイルを高速に読む...
-
「パスが見つかりません」とい...
-
fopenでディレクトリ内の全ファ...
-
ListBoxのデータを高速でファイ...
-
データファイルをプロットする(...
-
ディレクトリ名を取得したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラーログ「\\x8ew\\x92\\xe8...
-
LWPのインストール
-
unlink 、renameが使えない理由
-
readdir におけるフルパスでの...
-
perl system関数 引数 フォルダ
-
Perlファイルテスト演算子が正...
-
perl上からfindを使い検索した...
-
フルパスについてご質問します
-
初心者 Hello worldをしたい
-
Template-Toolkitのテンプレー...
-
AuthUserFile用に登録するためには
-
PerlとUnixの関係
-
perlからのexcel読み込み
-
perlのローカルプログラムでデ...
-
ファイル操作について
-
配列を使ってファイル名のリネーム
-
perlが突然動かなくなりました
-
PG全くの初心者が、C言語での作...
-
VBAでCSVファイルを途中行まで...
-
VBAで巨大なファイルの途中から...
おすすめ情報