use strict;
use warnings;
use Spreadsheet::WriteExcel;
use Text::CSV;

my ($row, $col, $line, @new);

# Kommandozeilenparameter pruefen
die "Usage: $0 datei.csv\n" unless(@ARGV); 

# Ja, Dateiname ubernehmen
my $filename = shift;

# Passt die Endung (.xls)?
$filename =~ /(.*)\.csv$/i or die "Ungueltiger Dateiname: $filename\n";

# Dateiname ohen Endung:
my $prefix = $1;

# ein neues Objekt erzeugen
my $csv = Text::CSV->new(
             {binary           => 1,  # alle Codes erlauben
              eol              => $\, # Newline Betriebssystem-
                                      # spezifisch setzen
              allow_whitespace => 1,  # Leerzeichen zwischen
                                      # den Feldern erlauben
              quote_char       => '"',# Anfuehrungszeichen definieren
              sep_char         => ',',# Feldtrenner definieren
             });

# Datei mit kommaseparierten Feldern oeffnen
open (CSV, '<', $filename) or die "$filename: $!";

# Excel-Datei erzeugen
my $excel  = Spreadsheet::WriteExcel->new($prefix . '.xls');
my $sheet = $excel->addworksheet();

# $row and $col beginnen bei 0
$row = 0;
while ($line = <CSV>) 
  {
  chomp($line);
  # Zeile in Felder zerlegen
  if ($csv->parse($line)) 
    { @new = $csv->fields(); }
  for $col (0 .. $#new) 
    { $sheet->write($row, $col, $new[$col]); }
  $row++;
  }
$excel->close();
