Umwandeln einer Excel-Tabelle in eine tab-getrennte txt-Datei
Thomas Knoblich
- perl
Wie kann ich ein Excel Sheet in eine tab-getrennte txt-Datei umwandeln. Da ich nicht über sonderlich viel Erfahrung verfüge wäre ich dankbar wenn ich den Code hätte und nicht nur oberflächliche Erklärungen. Das OLE-Modul habe ich integriert.
Danke für die Hilfe im voraus.
gruss
thomas
Hallo Thomas,
Excel-Sheet aufrufen und bei "speichern unter" den entsprechenden Dateityp wählen (mein Office hier spricht Englisch, da heißt es: .txt, Tab deliminetd). Geht mind. ab Office 2000+
Ois ganz isi,
Andreas
Ups,
aber wie das in Perl geht... Sorry, das hatte ich überlesen :-(
Andreas
Ups,
aber wie das in Perl geht... Sorry, das hatte ich überlesen :-(
Andreas
Ich benötige es in Perl, weil ich es über ein Script aufrufen lassen muss, damit es nachts auf dem Server entsprechend generiert werden kann.
Trotzdem Danke.
gruss
thomas
Hallo,
was hindert Dich daran, die Datei anstatt als '*.xls' als 'Text (Tabs getrennt) (*.txt)' zu speichern, und diese *.txt-Datei dann vom Script aufrufen zu lassen? Warum willst Du Dir mehr Arbeit machen als notwendig ist?
Gruß Markus
Hallo,
Wie kann ich ein Excel Sheet in eine tab-getrennte txt-Datei umwandeln.
Für das Auslesen von Excel-Dateien kannst Du das Modul Spreadsheet::ParseExcel verwenden.
Ich hoffe, Du weißt, wie Du ein Modul installieren kannst.
Da ich nicht über sonderlich viel Erfahrung verfüge wäre ich dankbar wenn ich den Code hätte und nicht nur oberflächliche Erklärungen.
Eigentlich bin ich mir nie darüber im Klaren, ob das posten con Code immer das Wahre ist, aber was solls:
use strict;
use Spreadsheet::ParseExcel;
my $excel = new Spreadsheet::ParseExcel;
my $parser = $excel->Parse('deine_datei.xls');
$sheet = $parser->{Worksheet}[0]; # liest aus der ersten Tabelle aus
for(my $irow = $sheet->{MinRow} ; defined $sheet->{MaxRow} && $irow <= $sheet->{MaxRow} ; $irow++)
{ # hier werden alle verfuegbaren Zeilen durchlaufen
my(@werte) = ();
for(my $icolumn = $sheet->{MinCol} ; defined $sheet->{MaxCol} && $icolumn <= $oWkS->{MaxCol} ; $sheet++)
{ # hier werden alle verfuegbaren Spalten der aktuellen Zeile durchlaufen
my $act_cell = $sheet->{Cells}[$irow][$icell]; # Ermitteln der aktuellen Zelle
if($act_cell)
{ # nur wenn in der aktuellen Zelle was drin steht, wird der Wert uebernommen
push @werte, $act_cell->Value;
}
else
{ # falls die aktuelle Zelle nicht definiert ist, wird dafuer gesort, dass das Array auch richtig befuellt wird
push @werte, '';
}
}
print join("\t",@werte),"\n";
}
(Achtung, ungetestet)
Grüße
Klaus
Hallo Klaus!
Eigentlich bin ich mir nie darüber im Klaren, ob das posten con Code immer das Wahre ist, aber was solls:
Nein, das Wahre ist es nicht immer, aber in manchen Fällen kann es für den Frager sehr nützlich sein. Beispiel:
Das 2-Frames JavaScript würde ich hier nicht posten (es ist in SELFHTML schon vorhanden und dort gut erklärt, man kann dem Frager zumuten, dass er danach sucht).
Aber andererseits, ich persönlich bin (oder war, denn ich lese mittlerweile immer weniger, was sowohl aus Zeitmangel als auch aus nachlassendem Interesse im Allgemeinen - Kapitulation vor der Inflation des Dazu-lernen-müssens, man(n) wird alt...), jedenfalls war ich immer über hier geposteten Codefetzen froh, weil ich darin immer etwas gefunden habe, dass mich neugierig gemacht hat und das ich versucht habe, in einem anderen Zusammenhang anzuwenden. Wäre es nicht gepostet worden, wäre ich mangels an Kenntnissen und mangels an Konzentration beim Lesen aller englischsprachigen perldocs und Konsorten (ich kann sowas aufgrund meines spärlichen Englischs nicht lange lesen ohne Kopfschmerzen zu haben) nie darauf gekommen, dass es "this way to do it" überhaupt gibt.
Fazit: Code posten - ja, kommt nur darauf an wie und wann und für wen (hiermit meine ich nicht, man soll den Code nur den Leuten zeigen, die einem "gefallen", sondern schon einschätzen können, ob es einem etwas bringt oder nicht - so rein nach Gefühl oder Menschenkenntnis).
Patrick
Morsche thomas,
Wie kann ich ein Excel Sheet in eine tab-getrennte txt-Datei umwandeln.
Spreadsheet::ParseExcel.pm zu finden bei http://www.cpan.org sollte dir weiterhelfen.
Da ich nicht über sonderlich viel Erfahrung verfüge wäre ich dankbar wenn ich den Code hätte und nicht nur oberflächliche Erklärungen. Das OLE-Modul habe ich integriert.
Ich bin nicht sicher ob du in diesem Fall hier richtig bist; evtl. möchtest du lieber nach einem geeigneten Perl-Entwickler suchen, der dir (gegen eine entsprechende Entlohnung) eine Komplett-Lösung anbietet.
ad,
kd.