いつも大変お世話になっております。
エクセルブック(.xls)に週報データが保存されています。
1週が1sheetになっているため1ファイルに53sheet入っています。
10年分のため、10ファイルあります。
各sheetは同じフォーマットで入っています。
これらをPERLで一括して読み込みたいと思っています。
従来は、1sheetずつ .csvに変換して、読み込んでいました。
しかし これらだと530回 .csvに吐き出す処理が必要で、根気が続きません。
バッチ処理で一気に.csvに吐き出すか、あるいは.csvに吐き出さずに
.xlsのまま、読み込みたいと思っています。
PERLは active perl 5.14.2をWindows 7のコマンドプロンプト上から起動しています。
ご指導のほど宜しくお願い申し上げます。
No.6ベストアンサー
- 回答日時:
> Wide character in print at ..
お馴染みの警告です。
そのままのメッセージで検索すれば、原因と対処法がわかると思います。
http://www.rwds.net/kuroita/program/Perl_unicode …
重ね重ね 初歩的なことでご指導ありがとうございました。
試行錯誤していますが、まだうまくいきません。
スレッドを改めて、質問させていただこうと思います。
今後ともひきつづきご指導よろしくお願い申し上げます。
No.5
- 回答日時:
素直に、ppmでspreadsheet-ParseExcel をインストールしたらいいのでは?
http://code.activestate.com/ppm/Spreadsheet-Pars …
あと、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個は他のファイルとフォーマットも同じで、いまのところ何が原因かわかりません。
なにか、お心当たりないでしょうか。。。
No.4
- 回答日時:
質問とは的外れかもしれません。
ご参考までに下記します。
ブック毎に1クリックでブック内の全てのシートをCSVに変換するソフトを提案します。
このソフトだと10年分をCSVに変換するために10回ほど作業(10回のクリック)を行なう必要があります。
質問の作業がどのような頻度で発生しているのか、又、CSVへの変換が単純変換なのか条件付変換なのか
不明な状態での提案です。
悪しからず。
以上
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";
}
################################################################################
################################################################################
################################################################################
インデントのため行頭には全角スペースを入れてますのでコピペの場合はご注意を
以上、ご参考になればいいのですが
この回答への補足
コードから、注意点までご親切にありがとうございます。
Windows 7のコマンドプロントから実行しています。
http://search.cpan.org/dist/Spreadsheet-ParseExc …
から
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は環境づくりが難しいです。。。
この点 ご指導お願いいたします。
No.2
- 回答日時:
http://search.cpan.org/~dmow/Spreadsheet-XLSX-0. …
ってモジュールがあります。
使ったこと無いので、どの位うまくできるか、はわかりません
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) VBAで出力したCSVファイルの先頭にカンマを挿入したい 5 2022/10/14 12:20
- Visual Basic(VBA) VBA 毎日取得するデータを順番に反映していく方法 6 2023/08/26 16:22
- Visual Basic(VBA) エクセルVBA 既存エクセルを開きその中のシートとしてCSVファイルを開く 3 2023/05/31 13:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA 『Call』で呼び出す...
-
Excel VBA 定義されたプロージ...
-
VBA This Workbookモジュール...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBAで、ユーザーフォーム...
-
VBAで別モジュールへの変数の受...
-
エクセルVBAでシートモジュール...
-
VBでグローバル変数を宣言するには
-
現在アクティブなフォーム名を...
-
モジュールとクラスの違いって...
-
【vba】フォームに書いてあ...
-
VB2005ーDataGridViewの選択さ...
-
'Range'メソッドは失敗しました
-
Access VBA標準モジュールにつ...
-
ユーザー定義関数に#NAME?が返...
-
Excel VBA 標準モジュール内で...
-
モジュールとは何ですか
-
XAMPPでperlからMySQL
-
Workbook.BeforeSave イベント...
-
モジュールを使わないで画像サ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 定義されたプロージ...
-
ArduinoのジャイロモジュールMP...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
Excel VBA 『Call』で呼び出す...
-
エクセルVBAでシートモジュール...
-
モジュールとは何ですか
-
VBA This Workbookモジュール...
-
VBでグローバル変数を宣言するには
-
グラフのX,Y座標を取得したい
-
モジュールの最大数はいくつな...
-
【vba】フォームに書いてあ...
-
VBAで旧字体を異字体に一括で変...
-
Excel VBAで、ユーザーフォーム...
-
Form間の値の渡し方
-
モジュールとクラスの違いって...
-
Access VBA標準モジュールにつ...
-
本当にPublicな変数(配列で)
-
標準モジュールを削除したい。(...
おすすめ情報