Files
votianng/html/tools/mycsv2xls.pl
2026-03-29 10:34:57 +02:00

184 lines
5.3 KiB
Perl

#!/usr/bin/perl -w
# http://www.experts-exchange.com/Programming/Languages/Scripting/Q_24798100.html
use strict;
use Spreadsheet::WriteExcel;
sub write_sheet ($$$) {
my ($workbook, $sheetname, $filename) = @_;
my $sheet = $workbook->addworksheet($sheetname);
my $string0 = 0;
my $string1 = 0;
my $string2 = 0;
my $string3 = 0;
my $string4 = 0;
my $string5 = 0;
my $string6 = 0;
my $number5 = 0;
my $number6 = 0;
my $number7 = 0;
my $number8 = 0;
my $number9 = 0;
my $linenostart = 1;
my $format1 = $workbook->add_format();
$format1->set_num_format('#,##0.00');
# http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel/lib/Spreadsheet/WriteExcel.pm
if ("sued" eq $ARGV[$#ARGV-1]) {
$sheet->set_column(0, 0, 32);
$sheet->set_column(1, 1, 13.71);
$string1 = 1;
$sheet->set_column(2, 2, 21.57);
$sheet->set_column(3, 3, 8.14);
$string3 = 1;
$sheet->set_column(4, 4, 8.43);
$string4 = 1;
$sheet->set_column(5, 6, 9.57);
$sheet->set_column(7, 7, 11);
$sheet->set_column(8, 8, 12);
$sheet->set_column(9, 9, 11.71);
$sheet->set_column(10, 10, 12.29);
$sheet->set_column(11, 11, 4);
$sheet->set_column(12, 12, 7.14);
$sheet->set_column(13, 14, 8.57);
$sheet->set_column(15, 15, 7.71);
$sheet->set_column(16, 16, 8.57);
$sheet->set_column(17, 17, 8);
$sheet->set_column(18, 18, 9.43);
$sheet->set_column(19, 19, 5.43);
$sheet->set_column(20, 20, 8);
$sheet->set_column(21, 21, 11.14);
$linenostart = 2;
}
if ("nord_service" eq $ARGV[$#ARGV-1]) {
$sheet->set_column(0, 0, 11.57);
$string0 = 1;
$sheet->set_column(1, 1, 9.57);
$sheet->set_column(2, 2, 9.43);
$string2 = 1;
$sheet->set_column(3, 3, 8.57);
$string3 = 1;
$sheet->set_column(4, 4, 25.43);
$string4 = 1;
$sheet->set_column(5, 5, 10.57);
$string5 = 1;
$sheet->set_column(6, 6, 8.71);
$sheet->set_column(7, 7, 7.57);
$number7 = 1;
}
if ("nord_diff" eq $ARGV[$#ARGV-1]) {
$sheet->set_column(0, 0, 32.86);
$sheet->set_column(1, 1, 13.71);
$string1 = 1;
$sheet->set_column(2, 2, 21.14);
$sheet->set_column(3, 3, 12.29);
$sheet->set_column(4, 4, 9.71);
$sheet->set_column(5, 5, 16.71);
$number5 = 1;
$sheet->set_column(6, 6, 12.29);
$number6 = 1;
$sheet->set_column(7, 7, 9.00);
$number7 = 1;
$linenostart = 2;
}
if ("nord_return" eq $ARGV[$#ARGV-1]) {
$sheet->set_column(0, 0, 32.00);
$sheet->set_column(1, 1, 13.71);
$string1 = 1;
$sheet->set_column(2, 2, 21.14);
$sheet->set_column(3, 3, 12.29);
$sheet->set_column(4, 4, 9.71);
$sheet->set_column(5, 5, 9.00);
$number5 = 1;
$sheet->set_column(6, 6, 12.29);
$number6 = 1;
$linenostart = 2;
}
if ("nord_diff_special" eq $ARGV[$#ARGV-1]) {
$sheet->set_column(0, 0, 9.57);
$sheet->set_column(1, 1, 9.43);
$string2 = 1;
$sheet->set_column(2, 2, 9.43);
$string3 = 1;
$sheet->set_column(3, 3, 8.57);
$string4 = 1;
$sheet->set_column(4, 4, 25.43);
$string5 = 1;
$sheet->set_column(5, 5, 10.57);
$string6 = 1;
$sheet->set_column(6, 6, 8.71);
$sheet->set_column(7, 7, 8.57);
$number8 = 1;
$sheet->set_column(8, 8, 8.29);
$number9 = 1;
$linenostart = 2;
}
if ("nord_return_special" eq $ARGV[$#ARGV-1]) {
$sheet->set_column(0, 0, 9.57);
$sheet->set_column(1, 1, 9.43);
$string2 = 1;
$sheet->set_column(2, 2, 9.43);
$string3 = 1;
$sheet->set_column(3, 3, 8.57);
$string4 = 1;
$sheet->set_column(4, 4, 25.43);
$string5 = 1;
$sheet->set_column(5, 5, 10.57);
$string6 = 1;
$sheet->set_column(6, 6, 8.71);
$sheet->set_column(7, 7, 8.57);
$number8 = 1;
$sheet->set_column(8, 8, 8.29);
$number9 = 1;
$linenostart = 2;
}
if ("inkasso" eq $ARGV[$#ARGV-1]) {
$sheet->set_column(0, 0, 8.43);
$sheet->set_column(1, 1, 9.57);
$sheet->set_column(2, 3, 9.57);
$sheet->set_column(3, 3, 26.71);
$sheet->set_column(4, 4, 10.7);
$number5 = 1;
$sheet->set_column(5, 5, 11.86);
$sheet->set_column(6, 6, 10.71);
$sheet->set_column(7, 7, 8.43);
$linenostart = 4;
}
open(CSV, "$filename") or die "cannot open $!";
while (<CSV>) {
chomp;
my(@vals)=split(/;/, $_);
# my $format = undef;
foreach my $vidx (0..$#vals) {
if (($vidx == 0 && $string0 == 1) || ($vidx == 1 && $string1 == 1) || ($vidx == 2 && $string2 == 1) || ($vidx == 3 && $string3 == 1) || ($vidx == 4 && $string4 == 1) || ($vidx == 5 && $string5 == 1) || ($vidx == 6 && $string6 == 1)) {
$sheet->write_string(($.-1), $vidx, $vals[$vidx]);
} elsif (($. > $linenostart) && (($vidx == 5 && $number5 == 1) || ($vidx == 6 && $number6 == 1) || ($vidx == 7 && $number7 == 1) || ($vidx == 8 && $number8 == 1) || ($vidx == 9 && $number9 == 1))) {
$sheet->write_number(($.-1), $vidx, $vals[$vidx], $format1);
} else {
$sheet->write(($.-1), $vidx, $vals[$vidx]);
}
}
}
close(CSV);
return 1;
}
my $wb = Spreadsheet::WriteExcel->new($ARGV[$#ARGV]);
foreach my $f ( @ARGV ) {
if ($f ne $ARGV[$#ARGV]) {
if ( -e $f ) {
my $t = $f;
$t =~ s/^.*\/|\..*$//g;
write_sheet($wb,$t,$f);
} else {
if ($f ne $ARGV[$#ARGV-1]) {
print "$f is not a file\n";
}
}
}
}
$wb->close() or die "Error closing file: $!";