• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルブック(.xls)のシートデータ読込)

エクセルブック(.xls)のシートデータ読込

このQ&Aのポイント
  • エクセルブック(.xls)に保存されている週報データを一括で読み込む方法について知りたいです。
  • 従来は1シートずつCSVに変換して読み込んでいましたが、10年分のデータを処理するのは手間がかかります。
  • バッチ処理で一気にCSVに出力する方法や、.xlsのまま読み込む方法を教えていただきたいです。

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

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

> Wide character in print at .. お馴染みの警告です。 そのままのメッセージで検索すれば、原因と対処法がわかると思います。 http://www.rwds.net/kuroita/program/Perl_unicode.html

ng999
質問者

お礼

重ね重ね 初歩的なことでご指導ありがとうございました。 試行錯誤していますが、まだうまくいきません。 スレッドを改めて、質問させていただこうと思います。 今後ともひきつづきご指導よろしくお願い申し上げます。

その他の回答 (5)

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

素直に、ppmでspreadsheet-ParseExcel をインストールしたらいいのでは? http://code.activestate.com/ppm/Spreadsheet-ParseExcel/ あと、CPANでの説明にあるように、ParseExcelはxls用で、xlsxにはxlsxを使う、というのは良いですね? http://code.activestate.com/ppm/Spreadsheet-xlsx/

ng999
質問者

補足

動きました! すばらしいです!! あと10個のファイルのうち5個で Wide character in print at .. というエラーが出て、出力が文字化けしています。 atの指しているのは print OUT $sDT."\n"; の行です。 5個は他のファイルとフォーマットも同じで、いまのところ何が原因かわかりません。 なにか、お心当たりないでしょうか。。。

  • bignishi
  • ベストアンサー率25% (1/4)
回答No.4

質問とは的外れかもしれません。 ご参考までに下記します。 ブック毎に1クリックでブック内の全てのシートをCSVに変換するソフトを提案します。 このソフトだと10年分をCSVに変換するために10回ほど作業(10回のクリック)を行なう必要があります。 質問の作業がどのような頻度で発生しているのか、又、CSVへの変換が単純変換なのか条件付変換なのか 不明な状態での提案です。 悪しからず。 以上

ng999
質問者

お礼

おっしゃるとおり、めったにない作業です。 ですので1年分ごとにクリックしてで問題ありません。 ありがとうございました。

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.3

excelのデータだけ取るなら、モジュール「Spreadsheet::ParseExcel」はたいへんな優れものです ピュアperlなのでLinuxでも動きます モジュールのサンプルを見て作った実際動く実験プログラムのサブルーチン部分(モジュールバージョンは0.59)を以下に プログラム全体の都合上、utf8で作ったけど、その辺はいろいろと試してください わかってるとおもいますが本体に use Spreadsheet::ParseExcel; 宣言が必ず必要です また、Excel形式のCSVはセル内に改行やコンマなどがあった場合、ちょっとした加工が必要です ################################################################################ ################################################################################ ################################################################################  my $sFN = 'エクセルファイル名.xls';  ## **************************************************************************  my $filename = $sFN;  ## **************************************************************************  my $parser = Spreadsheet::ParseExcel->new();  my $workbook = $parser->parse( $filename );  ## **************************************************************************  if ( !defined $workbook ) { die "Parsing error: ", $parser->error(), ".\n"; }  ## **************************************************************************  my $sRT = '';  ## **************************************************************************  ## シートの数だけ繰り返し  for my $worksheet ( $workbook->worksheets() ) {   ## 1シート分、縦横のカラム数   my ( $row_min, $row_max ) = $worksheet->row_range();   my ( $col_min, $col_max ) = $worksheet->col_range();   ## **************************************************************************   my $sK = '';   my $sV = '';   ## ----------------------------------------   my @aROW;   ## 縦の段を上から順に行単位で処理   foreach my $nLineY ( $row_min .. $row_max ) {    my @aTMP;    foreach my $nLineX ( $col_min .. $col_max ) {     my $cDT = $worksheet->get_cell($nLineY,$nLineX);     my $sTMP = '';     ## セルにデータが在ったときの処理     if($cDT){ $sTMP = $cDT->value(); }     push(@aTMP, $sTMP);    }    my $sCOL = join(",",@aTMP);    push(@aROW,$sCOL);   }   ## ----------------------------------------   ## 蓄積したテーブル群を一個に変数にまとめる   my $sDT = join("\n",@aROW);   ## ----------------------------------------   ## **************************************************************************   ## last;   print $sDT."\n";   print "******************************************************\n";   print "******************************************************\n";  } ################################################################################ ################################################################################ ################################################################################ インデントのため行頭には全角スペースを入れてますのでコピペの場合はご注意を 以上、ご参考になればいいのですが

ng999
質問者

補足

コードから、注意点までご親切にありがとうございます。 Windows 7のコマンドプロントから実行しています。 http://search.cpan.org/dist/Spreadsheet-ParseExcel/lib/Spreadsheet/ParseExcel.pm から Spreadsheet-ParseExcel-0.59.tar.gz をダウンロードしてきて解凍したのち、 perl MakeFile.PL としたところ、以下のメッセージが出ました。 It looks like you don't have a C compiler on your PATH, so you will not be able to compile C or XS extension modules. You can install GCC from the MinGW package using the Perl Package Manager by running: ppm install MinGW Writing Makefile for Spreadsheet::ParseExcel Writing MYMETA.yml そののち、 Warning: prerequisite ... という警告メッセージが4行でました。 そこで ppm install MinGW を実行したところ、なにかインストールしてくれました。 そこでもう一度 perl MakeFile.pl をやりましたが、同じ結果となります。 perlは環境づくりが難しいです。。。 この点 ご指導お願いいたします。

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

http://search.cpan.org/dist/Spreadsheet-ParseExcel/lib/Spreadsheet/ParseExcel.pm http://search.cpan.org/~dmow/Spreadsheet-XLSX-0.13-withoutworldwriteables/lib/Spreadsheet/XLSX.pm ってモジュールがあります。 使ったこと無いので、どの位うまくできるか、はわかりません

ng999
質問者

お礼

これが評判のParseExcelですね。ダウンロードしてみました。 ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

Win32::OLE で Excel を操作できる.

ng999
質問者

お礼

いろいろあるのですね。。

関連するQ&A

専門家に質問してみよう