- ベストアンサー
エクセルブック(.xls)のシートデータ読込
- エクセルブック(.xls)に保存されている週報データを一括で読み込む方法について知りたいです。
- 従来は1シートずつCSVに変換して読み込んでいましたが、10年分のデータを処理するのは手間がかかります。
- バッチ処理で一気にCSVに出力する方法や、.xlsのまま読み込む方法を教えていただきたいです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
> Wide character in print at .. お馴染みの警告です。 そのままのメッセージで検索すれば、原因と対処法がわかると思います。 http://www.rwds.net/kuroita/program/Perl_unicode.html
その他の回答 (5)
- kmee
- ベストアンサー率55% (1857/3366)
素直に、ppmでspreadsheet-ParseExcel をインストールしたらいいのでは? http://code.activestate.com/ppm/Spreadsheet-ParseExcel/ あと、CPANでの説明にあるように、ParseExcelはxls用で、xlsxにはxlsxを使う、というのは良いですね? http://code.activestate.com/ppm/Spreadsheet-xlsx/
補足
動きました! すばらしいです!! あと10個のファイルのうち5個で Wide character in print at .. というエラーが出て、出力が文字化けしています。 atの指しているのは print OUT $sDT."\n"; の行です。 5個は他のファイルとフォーマットも同じで、いまのところ何が原因かわかりません。 なにか、お心当たりないでしょうか。。。
- bignishi
- ベストアンサー率25% (1/4)
質問とは的外れかもしれません。 ご参考までに下記します。 ブック毎に1クリックでブック内の全てのシートをCSVに変換するソフトを提案します。 このソフトだと10年分をCSVに変換するために10回ほど作業(10回のクリック)を行なう必要があります。 質問の作業がどのような頻度で発生しているのか、又、CSVへの変換が単純変換なのか条件付変換なのか 不明な状態での提案です。 悪しからず。 以上
お礼
おっしゃるとおり、めったにない作業です。 ですので1年分ごとにクリックしてで問題ありません。 ありがとうございました。
- ralf124c
- ベストアンサー率52% (232/446)
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"; } ################################################################################ ################################################################################ ################################################################################ インデントのため行頭には全角スペースを入れてますのでコピペの場合はご注意を 以上、ご参考になればいいのですが
補足
コードから、注意点までご親切にありがとうございます。 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)
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 ってモジュールがあります。 使ったこと無いので、どの位うまくできるか、はわかりません
お礼
これが評判のParseExcelですね。ダウンロードしてみました。 ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
Win32::OLE で Excel を操作できる.
お礼
いろいろあるのですね。。
お礼
重ね重ね 初歩的なことでご指導ありがとうございました。 試行錯誤していますが、まだうまくいきません。 スレッドを改めて、質問させていただこうと思います。 今後ともひきつづきご指導よろしくお願い申し上げます。