PerlでExcelファイルをCSV形式に変換
Win32::OLEモジュールを使うと、PerlからWordやExcelなどのファイルにアクセスできるようになる。
ExcelシートからCSV形式への変換は、xlsファイルから読み込んだブックのセルの内容を取得し、カンマで連結したものをシート別にファイルへ書き出す方法と、xlsファイルをシート単位でcsv形式で保存する方法がある。
Excelを開いてcsv形式で保存する作業を自動化するだけなので、後者の方法が効率的だし、短時間で済む。
前者の場合、Excelでのcsv形式に合わせる必要があるため、セル文字列にカンマと二重引用符が含まれる場合、ちょっとした工夫が要る。以下のように、二重引用符を2つずつにし、両端を二重引用符で囲むと、1つのセルの内容と見なされ、中で使われる二重引用符は区切り文字では無く、ただの文字として扱われる。
# セル内容にカンマ、二重引用符が含まれる場合 # $cel_out は、セルの内容 if ($cel_out =~ m/(.*?)(,|")(.*?)/) { $cel_out =~ s/"/""/g; $cel_out = '"'.$cel_out.'"'; }
後者は、シート別にSaveAsメソッドで保存するだけ。
my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); my $Book = $Excel->Workbooks->Open('xxx.xls'); $Excel->{DisplayAlerts} = 'False'; my $SheetCount = $Book->Worksheets->{Count}; foreach my $iSheet (1..$SheetCount) { my $Sheet = $Book->Worksheets($iSheet); $Sheet->SaveAs('xxx_'.$Sheet->{Name}.'.csv', xlCSV); } $Book->Close; $Excel->Quit();
参考ページ
Excelシート名一覧
perlでMS-Excelファイル(xls)データ読込:IT資格取得の軌跡:So-net blog
PerlでCSV(テキスト)からXLS(エクセル)への最速変換