Announcement

Collapse
No announcement yet.

Exceldatei per Perlscript lesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Exceldatei per Perlscript lesen

    Hallo,

    ich möchte mit einem Perl Skript eine Excel Datei lesen. Dazu habe ich folgendes Skript.
    /////////////////////////////////////////////////////////////////////////////////////////
    use strict;
    use Win32::OLE qw(in with);
    use Win32::OLE::Const 'Microsoft Excel';
    $Win32::OLE::Warn = 3;
    my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
    || Win32::OLE->new('Excel.Application', 'Quit');
    my $Book = $Excel->Workbooks->Open("D:\\Temp\\bb.xls");
    my $Sheet = $Book->Worksheets(1);
    my $array = $Sheet->Range("C7:C8")->{'Value'};
    foreach my $ref_array (@$array) {
    foreach my $scalar (@$ref_array) {
    print "$scalar\t";
    }
    print "\n";
    }
    /////////////////////////////////////////////////////////////////////////////////////////
    jetzt habe ich das Problem wenn ich auf Zellen zugreife die ein Datumformat haben, bekomme ich keine Sinnvollen Werte zurück geliefert. In denke es liegt an dem Format mit dem ich auf die Zelle zugreife. Im WWW habe ich statt 'Value' noch 'Text' gefunden, hilft mir aber auch leider nicht weiter.

    Hat da noch jemand eine Idee von Euch wie ich das Datums- / Zeitformat richtig auslesen kann?

    Danke!!!

  • #2
    Auch hallo.

    Das Modul "Spreadsheet::Read" wurde auch schon mal versucht ?
    Siehe http://board.perl-community.de/threa...Message=0#MSG9

    Gruss
    MfG
    Cheat-Sheets for Developers / Programming Quotes

    Comment


    • #3
      Hallo,
      ich hab mir das mal angeschaut. Aber irgendwie hab's ich nicht hinbekommen. Ich bekomme das Datum einfach nicht richtig ausgelesen. Vielleicht hat jemand noch mal eine Idee?
      Danke, Gruss

      Comment


      • #4
        Hallo, ich stand vor dem gleiche Problem.

        Es ist möglich durch die Änderung des Suchbegriffs "Value" nach "Formula".
        Mit Perl Excel Datumsangaben als Zahlen auszulesen.

        Code:
        /////////////////////////////////////////////////////////////////////////////////////////
        use strict;
        use Win32::OLE qw(in with);
        use Win32::OLE::Const 'Microsoft Excel';
        $Win32::OLE::Warn = 3;
        my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
        || Win32::OLE->new('Excel.Application', 'Quit');
        my $Book = $Excel->Workbooks->Open("D:\\Temp\\bb.xls");
        my $Sheet = $Book->Worksheets(1);
        my $array = $Sheet->Range("C7:C8")->{'Formula'};
        foreach my $ref_array (@$array) {
        foreach my $scalar (@$ref_array) {
        print "$scalar\t";
        }
        print "\n";
        }
        /////////////////////////////////////////////////////////////////////////////////////////
        Der 01.07.2008 ergäbe 39630 das sind 39630 Tage nach dem 01.01.1900.

        Das Korrekte Datum lässt sich wiederum mit dem CPAN Modul Date-Calc berechnen.

        Code:
        /////////////////////////////////////////////////////////////////////////////////////////
        use Date::Calc qw(:all);
        
        $exceldatum = "39630";
        $exceldatum = ($exceldatum - 2);
        
        ( $jahr, $monat, $tag ) = Add_Delta_Days (1900,1,1, $exceldatum);
        
        if ($monat < 10) {
        	$monat = "0$monat";
        }
        if ($tag < 10) {
        	$tag = "0$tag";
        }
        
        $convert_excel_datum = "$tag.$monat.$jahr";
        
        $exceldatum_neu = Delta_Days(1900,01,01, $jahr,$monat,$tag);
        $exceldatum_neu = ($exceldatum_neu + 2);
        
        print "$exceldatum = $convert_excel_datum = $exceldatum_neu\n";
        /////////////////////////////////////////////////////////////////////////////////////////

        Comment

        Working...
        X