2011年12月26日 星期一

XLS 轉 CSV

倒過來一樣沒問題,在強大的技術力之下,掙扎是沒用的,每週都看到有人用我的程式去做報表,而且是笨笨的手動從XLS轉檔成 CSV,還手動一個檔案、一個檔案的輸入,我看的快發瘋了,為什麼不能把資料夾底下的CSV檔案都列舉出來做掉呢?
為什麼不自動的去把資料庫吐出來的XLS檔案轉成CSV呢?

#!/usr/bin/perl -w

use strict;
use Spreadsheet::ParseExcel;
use utf8;
use Encode;

# Check for valid number of arguments
if ((@ARGV <= 0) || (@ARGV >= 3)) {
   die("Usage: xls2csv.pl excelFile.xls execFile.csv\n");
}

my $file=$ARGV[0];

if($file !~ /\.xls$/){
 die "Please input a .xls file\n";
}
my ($fHeader,$fTail)=split /\./,((@ARGV>=2)?$ARGV[1]:$file);

open FILE,">"."$fHeader".".csv" || die "Can't open file for write!\n";

my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file);
foreach my $sheet (@{$excel->{Worksheet}}) {
    printf("Sheet: %s\n", $sheet->{Name});
    $sheet->{MaxRow} ||= $sheet->{MinRow};
    foreach my $row ($sheet->{MinRow} .. $sheet->{MaxRow}) {
        $sheet->{MaxCol} ||= $sheet->{MinCol};
        foreach my $col ($sheet->{MinCol} ..  $sheet->{MaxCol}) {
            my $cell = $sheet->{Cells}[$row][$col];
            if ($cell) {
             printf FILE "\"%s\",",encode('utf8',$cell->value());
            }
        }
        print FILE "\n";
    }

}
close FILE;

沒有留言:

張貼留言