Excel Workbooks lesen

Hallo leute,

ich wollte mal ein wenig mit dem
neuen PHP5 herumspielen und dazu
eine kleine Seite entwickeln, die
ihre Daten aus den Tabellen (Sheets)
eines gewöhnlichen Excel-Workbooks
zieht.

Irgendwie komme ich nicht zurecht,
ich finde zwar Module zum schreiben
von Excel, aber mit dem lesen hapert es.

Kennt sich jemand aus?

Grüße

CMБ

das Thema hatten wir schon mal - habs im Archiv aber auch nicht gefunden.
Afaik geht das auch nicht.
warum könnte man eigentlich auch diesem Artikel entnehmen:
http://bernd-wurst.de/linux/im_bett_mit_microsoft.php

in kurz:
Microsoft baut die Produkte so, dass sie zwar möglichst kompatibel sind, wenn sie Dateien ÖFFNEN. Aber möglichst inkompatibel, wenn sie sie wieder SPEICHERN.
Dadurch soll eine gewisse Kundenbindung erreicht werden und der Absatz gesichert werden.

Man könnte das so erklären, dass Du zwar schöne Tabellen mit php erstellen kannst, aber zusatzfeatures wie Kommentare in den Zellen, verbundene Zellen, Blattschutz, Arbeitsmappenschutz und so weiter aber fehlen…

vielleicht hilft Dir das ja weiter…
am einfachsten ist wohl ein Exportscript zu basteln…

Irgendwie komme ich nicht zurecht,
ich finde zwar Module zum schreiben
von Excel, aber mit dem lesen hapert es.

http://sourceforge.net/projects/phpexcelreader/

gruss Markus

Hallo MunichFreak

Microsoft baut die Produkte so, dass sie zwar möglichst
kompatibel sind, wenn sie Dateien ÖFFNEN. Aber möglichst
inkompatibel, wenn sie sie wieder SPEICHERN.

Im Prinzip sind diese Feinheiten ja häufig egal. Einige
Leute (die ich kenne) werfen eine mySQL- oder andere
Datenbank auf ein Problem, das sich wirklich leicht
mit einem hübschen Excel-Workbook von 5 kleinen
bis mittleren Tabellen lösen lässt.

Denn Excel-Tabellen sind ja ziemlich verbreitet,
man kann jeden Praktikanten daran setzen,
solche zu erstellen.

Wenn man einfach eine Excel-Tabelle aus dem
normalen Workflow ins Web werfen könnte - und
die Webanwendung dann die aktuellen Daten
aus dem Excel-File zieht, wäre das imho enorm
praktisch.

Ich mache das ja auch schon eine ganze
Weile - in Perl (in einer Mason-Umgebung),
da ist das kein Thema.
(http://search.cpan.org/~kwitknr/Spreadsheet-ParseExc…)

Von PHP hatte ich bis gestern keine Ahnung,
ich nahm an, das die Excel-Reader-Module
nur in einer Windows-Umgebung mit installiertem
Excel funktionieren. Dachte ich. Durch den
Hinweis von Markus habe ich aber geschnallt,
dass es zumindest ein Modul gibt, das seinen
eigenen OLE-Streamreader mitbringt.

Es „scheint“ auch (mit Abstrichen) zu funktionieren,
zumindest in einer PHP-4-Umgebung, die „zufällig“
gerade (mod_php4) auf meinem Webserver installiet
war :wink:

Grüße

CMБ

Hallo Markus,

http://sourceforge.net/projects/phpexcelreader/

Danke für den Tipp, ich hab das unter PHP4
zum Laufen gekriegt (mein PHP5 mach als solches
noch Probleme -> SuSE-10-EVAL; aber das bekomme
ich noch irgendwie geregelt).

Verblüffenderweise (für mich) gelang es mir sogar,
eine Excel-Workbook-Datei auszulesen. Zwar irritiert
mich das PHP noch ein wenig (kein Variablen-Scope,
„seltsame“ Referez-Syntax usw. :wink:, aber es ging
doch erstaunmlich leicht …

Ich hab mal den benötigten Quelltext, um ein Workbook
nach Worksheets durchzuscannen und die Spaltentitel
auszugeben, hier angehangen. Vielleicht nützt es ja
mal jemaden … irgendwann.
Die PHP-Version und die Perl-Version sollten die
selbe Ausgabe liefern.

Vielen Dank

CMБ

  1. PHP-Version:

        • 8setOutputEncoding(‚CP1252‘);
          $xlsbook->read(„daten.xls“);

    // Analysiere Excel-Datei: Schleife ueber die Worksheets
    $counter = 0;
    foreach( $xlsbook->boundsheets as $worksheet ) {

    $sheet = $xlsbook->sheets[$counter];
    // worksheet ist der Zeiger in die Info des Arbeitsblattes
    // sheet ist der Zeiger in die Daten des Arbeitsblattes
    $cols = $sheet[‚numCols‘];
    $rows = $sheet[‚numRows‘];
    print ’ Arbeitsblatt '. ($counter+1) . ': ’ . $worksheet[‚name‘] . ’ ';
    print ’ » hat: ‚. $rows . ’ Zeilen und ’ . $cols . ’ Spalten.‘;

    // Schleife über die Daten der Zeile 1 (bzw. 0)
    $celldata = $sheet[‚cells‘];
    $headrow = 1;
    print ’ Spaltenüberschriften: ';
    for( $x=1; $x

  2. Perl-Version:

        • 8Parse($excelfile);

    Analysiere Excel-Datei: Schleife ueber die Worksheets

    my $counter = 0;
    foreach my $sheet ( @{$workbook->{Worksheet}} ) {

    sheet ist der Zeiger in die Daten des Arbeitsblattes

    my $cols = $sheet->{MaxCol} - $sheet->{MinCol} + 1;
    my $rows = $sheet->{MaxRow} - $sheet->{MinRow} + 1;

    print ’ Arbeitsblatt '. ($counter+1) . ': ’ .$sheet->{Name} . ’ ';
    print ’ » hat: ‚. $rows . ’ Zeilen und ’ . $cols . ’ Spalten.‘;

    Schleife über die Daten der Zeile 1 (bzw. 0)

    my $celldata = $sheet->{Cells};
    my $headrow = 0;
    print ’ Spaltenüberschriften: ';
    for( my $x=0; $x[$headrow][$x]->Value . ’ : ') if defined $celldata->[$headrow][$x];
    }
    $counter++;
    }