Daten in eine .xls-Datei schreiben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Daten in eine .xls-Datei schreiben

Beitrag von Duff » 11.02.2006 17:30:13

Hallo,

ich lasse mit in einem einfachen Script Daten aus einer db auslesen und auswerten und anschließend in eine .xls-Datei einfügen, die dann per Mail verschickt wird.

Das ganze funktioniert auch ganz gut. Nur wenn man die .xls-Datei unter Windows mit Excel öffnet, habe ich nur die ausgegeben Werte in 4 Spalten aufgeteilt.

Gibt es eine Möglichkeit, diesen Spalten eine Überschrift zu verpassen?
Oh, yeah!

Benutzeravatar
Six
Beiträge: 8069
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Beitrag von Six » 12.02.2006 17:49:16

Das geht? Ich dacjte immer, .xls wären Binary! Wie genau gehst du vor?

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 12.02.2006 17:53:08

Eine .xls-Datei ist ja nur ein Format, das man unter Windows mit Excel öffnen kann.
Es geht bei mir um eine Statistik. Die bestimmten Daten dafür hole ich mir aus einer db und lasse sie dann per cronjob täglich als email versenden.

Hätte nur noch gerne für die einzelnen Spalten in Excel eine Überschrift, welche ich vorher schon definieren kann.
Oh, yeah!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 12.02.2006 18:11:52

Six hat geschrieben:Das geht? Ich dacjte immer, .xls wären Binary!
xsl Dateien sind zwar Binary, können aber z.B. über Perl (Spreadsheet::WriteExcel) gelesen und geschrieben werden.
Six hat geschrieben: Wie genau gehst du vor?
Das wissen wir leider noch immer nicht, daher werden wir ihm auch nicht helfen können, oder ?

@Duff
:wink:

Gruß
gms

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 12.02.2006 19:40:09

Habe das Script jetzt leider nicht vorliegen, da ich das ganze auf der Arbeit anwende.

Schreibe aber alles ganz normal in die Datei.
FILE=/home/user/beipiel.xls
DAT=/home/user/beispiel.txt

RESULT=`sqlplus ..> $DAT << +end+...`

....

echo $DAT > $FILE
So funktioniert das ganze sinngemäß.
Es werden auf jeden Fall die ganzen Daten einfach in die .xls-Datei geleitet und diese wird dann über mailx an die entsprechenden Empfänger gesendet. Die .xls-Datei kann man dann unter Windows mit Excel öffnen.
Oh, yeah!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 12.02.2006 19:50:35

auf diese Weise kannst du nicht wirklich eine xls Datei erzeugen. Wahrscheinlich wird diese Datei von Excel dann als CSV Datei eingelesen und kann von Excel dann natürlich auch als xls Datei wieder gespeichert werden.
Sind die Spaltenüberschriften in der $DAT Datei vorhanden ? Bei sqlplus geht das über "SET HEADING ON" so weit ich das noch im Kopf habe, nachdem das aber die default Einstellung ist, müßtest du das schon explicit abgestellt haben.

Gruß
gms

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 12.02.2006 19:56:29

Nee, in der $DAT sind die Überschriften nicht enthalten.

Bei sqlplus habe ich die Einstellungen so vorgenommen, dass der Head nicht angezeigt wird. Das wäre natürlich eine möglichkeit. Hatte ich noch gar nicht drüber nachgedacht.

Aber sonst gibt es keine Möglichkeit, die "excel"-Datei schon vorher zu bearbeiten?
Oh, yeah!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 12.02.2006 20:00:06

Sicher kannst du davor noch deine Spaltenüberschriften einfügen.
Schau dir mal die so erzeugte Datei an, das ist eine ganz normale Textdatei..

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 12.02.2006 20:08:06

Ja, aber was ich gerne wissen möchte ist, ob es eine Möglichkeit gibt, schon eine spezille Formatierung für excel zu erstellen (Schriftgröße, Schriftart, etc.).

Gibt es solche Formatierungswerkzeuge/Funktionen unter unix für excel in windows?
Oh, yeah!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 12.02.2006 20:19:05

wenn du diese Features möchtest, mußt du schon eine echte xls Datei erstellen. Das kannst du z.B. über das Perlmodul "Spreadsheet::WriteExcel".

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 12.02.2006 20:23:21

D.h. ich müsste mein Script in Perl schreiben und nicht in der ksh.
Oh, yeah!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 12.02.2006 20:35:58

Das Script könnte ja bleiben wie es ist, statt dem Befehl:

Code: Alles auswählen

cat $DAT > $FILE # "echo" durch "cat" ersetzt
machst du jedoch soetwas:

Code: Alles auswählen

perl myexcelwriter.pl $DAT $FILE
Hier habe ich dir ein Beispielprogramm herausgesucht:
http://homepage.eircom.net/~jmcnamara/p ... Excel.html

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 12.02.2006 20:40:41

Danke. Werde es mir gleich mal anschauen.

Was ich aber noch nicht ganz verstanden habe ist, dass hier

Code: Alles auswählen

perl myexcelwriter.pl $DAT $FILE
Bringe ich diese zeile in mein ksh-Script ein und verweise mit myexcelwriter.pl auf ein Perl-Script zum Formatieren der Excel-Datei (wie in deinem Link beschrieben)?
Oh, yeah!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 12.02.2006 21:05:12

Duff hat geschrieben:Was ich aber noch nicht ganz verstanden habe ist, dass hier

Code: Alles auswählen

perl myexcelwriter.pl $DAT $FILE
Bringe ich diese zeile in mein ksh-Script ein und verweise mit myexcelwriter.pl auf ein Perl-Script zum Formatieren der Excel-Datei (wie in deinem Link beschrieben)?
Ja, myexclwriter.pl war jetzt ein von mir gewählter Name, für ein von dir zu schreibendes Perlscript.
Der von mir gepostete Link zeigt, wie du ein einfaches excel-Sheet erstellen kannst. (auch mit Formatierungsangaben)
Du brauchst aber noch eine zusätzliche Funktionalität die "$DAT" einzulesen und deren Daten dann in dieses $FILE zu schreiben. Daher habe ich diese als Argumente auch mit übergeben.
Wenn du dir dieses Beispiel auch noch anschaust:
http://www.linux-magazin.de/Artikel/aus ... /perl.html
dort müßtest du dann

Code: Alles auswählen

my $IN  = "cd.dat";   # Eingabedatei
my $OUT = "cd.xls";   # Ausgabe-(Excel)-Datei
durch

Code: Alles auswählen

my $IN  = $ARGV[0];   # Eingabedatei
my $OUT = $ARGV[0];   # Ausgabe-(Excel)-Datei
ersetzen. (Natürlich mußt du auch noch andere Änderungen vornehmen, aber das Grundgerüst hättest du damit)

Gruß
gms

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 12.02.2006 21:08:46

Vielen Dank.

Werde es mir anschauen und morgen auf der Arbeit dann mal ausprobieren.

DANKE!
Oh, yeah!

Antworten