#!/usr/bin/perl
use strict;
use warnings;
use Spreadsheet::ParseExcel::Stream;
my $xls_file = $ARGV[0];
my $inp_path = ‘<input file directory>’;
my $out_path = ‘<output file directory>’;
my $xls = Spreadsheet::ParseExcel::Stream->new($inp_path.'/'.$xls_file);
my $cnt = 0;
my $cnt_file = 1;
my $aggregated_x = ();
my @data;
my $file_name;
my $cellVal;
my $sheet_name;
my $file_extension=".csv";
my $return_values="";
my @now = localtime(time);
while ( my $sheet = $xls->sheet() ) {
$sheet_name = $sheet->name;
$sheet_name =~ s/ /_/g;
$cnt_file = 1;
while(my $row = $sheet->row){
@data = @$row;
foreach $cellVal (@data) {
$aggregated_x .= "\"$cellVal\",";
}
chop($aggregated_x);
$aggregated_x .= "\n";
$cnt++;
if ($cnt==1){ write_header_file(); }
if($cnt==10000){ write_data_file(); }
}
if($cnt>0){ write_data_file(); }
}
print $return_values;
sub getFileName {
my @values = split('\.', $xls_file);
my $fileName = $_[1].'_'.$values[0].'_'.$_[0].'_';
$fileName .= sprintf("%04d_%02d_%02d_%02d_%02d_%02d", $now[5]+1900,$now[4]+1,$now[3],$now[2],$now[1],$now[0]);
return $fileName.$file_extension;
}
sub write_data_file{
opendir (DIR, $out_path) or mkdir( $out_path);
$file_name = getFileName($sheet_name,$cnt_file);
chomp($aggregated_x);
open (FILE, ">$out_path/$file_name");
print FILE $aggregated_x;
$return_values .= $file_name.',';
$aggregated_x = ();
$cnt_file++;
$cnt=0;
}
sub write_header_file{
opendir (DIR, $out_path) or mkdir( $out_path);
$file_name = getFileName($sheet_name,'Header');
chomp($aggregated_x);
open (FILE, ">$out_path/$file_name");
print FILE $aggregated_x;
$return_values .= $file_name.',';
$aggregated_x = ();
}
Hi,
I'm using the above code but i get the following errors:
Can't locate Coro.pm in @INC