#!/usr/bin/perl -W
#
# File: excel2csv.pl
# License: GPL-2
use strict;
use warnings;
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;
my $local_enc = "CP936";
unless($ARGV[0] && $ARGV[1])
{
die "Please enter the filename of Excel document.
Usage : excel2csv.pl [Excel filename] [Csv filename]
For example : excel2csv.pl input.xls output.csv\n";
}
my $oFmtJ = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map => $local_enc);
my $excel = Spreadsheet::ParseExcel->new();
my $book = $excel->Parse($ARGV[0], $oFmtJ);
my $last_sheet = $book->{SheetCount} - 1;
my $filename = $ARGV[1];
open my $fh, ">", $filename
or die "Can open $filename to write: $!\n";
for my $worksheet ( @{ $book->{Worksheet} }[ 0 .. $last_sheet ] ) {
next
if not defined $worksheet->{MaxRow}
or not defined $worksheet->{MaxCol};
my @row = $worksheet->{MinRow} .. $worksheet->{MaxRow};
my @col = $worksheet->{MinCol} .. $worksheet->{MaxCol};
for my $row ( @{ $worksheet->{Cells} }[ @row ] ) {
my @cellvalue = map {
$_ = $_->Value() if ref $_;
$_ = '' if not defined $_;
$_;
} @$row[ @col ];
print $fh join(";", @cellvalue), "\n";
}
}
close $fh;
|