Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]296[/thread]

Perl - Excel - CGI

Leser: 1


<< >> 6 Einträge, 1 Seite
rucksl
 2004-06-15 15:22
#2885 #2885
User since
2004-06-15
13 Artikel
BenutzerIn
[default_avatar]
Hallo,
ich habe ein Perl - CGI - Skript geschrieben.
In diesem lese ich ein Paar Daten aus und kann sie auch bearbeiten. Nun zu meinem Problem:

Ich möchte die Daten in eine Excel Datei speichern. Habe ich bei anderen Skripten auch schon öfter (problemlos) gemacht.

Wenn ich das Skript auf Kommandozeilenebene durch perl skript.pl aufrufe wird mir die Excel Datei erstellt, falls ich das CGI-Skript aber über Browser aufrufe, erstellt es mir keine Excel Datei. Woran kann dass denn liegen??

Probiere schon eine halbe Ewigkeit herum und komme leider nicht weiter. Evtl. hat von euch jemand eine Idee!?

Danke schon mal!
Gast Gast
 2004-06-15 15:30
#2886 #2886
Ein wenig Code wäre hilfreich :)
rucksl
 2004-06-15 15:44
#2887 #2887
User since
2004-06-15
13 Artikel
BenutzerIn
[default_avatar]
Okay, hier ein bisschen Code:


Meine Main:
main ();

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
sub main () {

#Verwendete Module
use Spreadsheet::WriteExcel; #Modul für die Erstellung von Excel-Dateien



#Variablendeklaration
@ergebnis;
my $dateiname_match = 'match.txt';        #Match-Datei fuer Aufsummieren zwischen CCM und Softguard
my @sum_komponenten_ccm; #Aufsummierte Anzahl der Komponenten CCM
my @sum_komponenten_sg; #Aufsummierte Anzahl der Komponenten SG
my $datum; #Datum wann Dateien erstellt wurden
my $zeit; #Zeit wann Dateien erstellt wurden
       @auswahl;                                                       #Getroffene Auswahl von Auswahl.html
       @bool_auswahl;                                                  #Array, mit Boolean Werten, ob in Auswahl Feld gewählt wurde. Gleicher Aufbau wie CCM und Softguard Abgleich
       @vorgabe_ueberschrift = ("sg.Device" ,"sg.DNS", "sg.Status", "sg.sysDescription", "sg.sysContact", "sg.sysName", "sg.sysLocation", "sg.SNr",
               "sg.FirstReport", "sg.LastReport", "ccm.Identitaet", "ccm.Klasse", "ccm.Hersteller", "ccm.Typ", "ccm.Subtyp", "ccm.Ort", "ccm.Gelaende",
               "ccm.Gebaeude", "ccm.Etage", "ccm.Raum", "ccm.Prefix", "ccm.Postfix", "ccm.Sortierung", "ccm.SNr", "ccm.Status", "ccm.Abgleichskriterium");




#Softguard
@softguard; #Daten von Softguard
@copy_softguard;
my @wrong_sysall; #Fehlerliste für syscontact, syslocation, sysname
my $datenbank = "SoftGuard"; #Bezeichnung der Datenenbank
my $benutzer = "root"; #Benutzer der Datenbank
my $pw = "sg24audi"; #PW des Datenbankusers
my $max_tage = 28; #Maximale Anzahl der Tage, welche seit letzten Report vergangen sein dürfen

#CCM
@ccm; #Daten von CCM
@copy_ccm;


my $datei_ccm = "ccm.txt"; #Bezeichnung der Datei von CCM
my @auswahl_typ = ('6C105', 'AP-3', '1G582-09', '1G587-09', '1G694-13', '1H582-25', '1H582-51', '2E252-49R', '2E253-49R', '2E43-27R', '2H252-25R', '2H253-25R', '2H258-17R',
'MicroMMAC-24E', 'MINI-MMAC', 'MMAC-M8FNB', 'MMAC5-FNB', 'SEHI-24', 'Smart Switch 2200', 'SSR-16', 'SSR-8', 'STHI-24', 'V2H124-24', 'VH-2402SM', 'AL1001B01',
'AL1001B02', 'AL2001A15', 'AL2001B15', 'AL2001B20', 'AL2012A14', 'AL2012B19', 'AL2012B34', 'AL4512B01', 'DJ1402001', 'DS1402001', 'DS1402002', 'EB1404015', 'EB1412003',
'IP 330', 'IP 350', 'IP 380', 'IP 440', 'IP 530', 'NBB3740000', '6E123-26', '6E233-49', '6G306-06', '6H202-24', '6H203-24', '6H252-17', '6H253-13',
'6H258-17', '6H303-48', '6H308-24', '6H308-48', '6H352-25', '7H4382-49', '9C300-1', '9C306', '9C406', '9E106-06', '9E132-15', '9E423-36', '9F206-02', '9F241-12',
'9F426-02', '9F426-03', '9H421-12', '9H422-12', '9H423-28', 'EMME', 'FOMIM-22', 'FOMIM-26', 'FORMIM-22', 'Alteon', 'Base Director', 'SA7225', 'SG 800-2', 'SG 800-3',
'1600', '2501', '2503', '2504', '2612', '7000', '803', 'AGS', 'NSM', 'Backbone Concentrator Node', 'Backbone Link Node');















       print "Content-type: text/html\n\n";

       #Uebergebene Argumente empfangen
read(STDIN, my $tmp, $ENV{'CONTENT_LENGTH'}); #Uebergebenes post lesen
@post_uebergabe = split(/&/, $tmp);

#Uebergebene Daten aufsplitten
foreach(@post_uebergabe) {
($data, $tmp) = split (/=/, $_);
                push @auswahl, $data;
}

       delete ($auswahl[-1]);                                           #Letztes Element ist ok von Buttonklick -->loeschen


      #Einlesen der Daten
chdir ("/usr/local/apache/htdocs/audi_zusatz/"); #Vezeichnis wechseln
&get_softguard(\$datenbank, \$benutzer, \$pw, \$max_tage);
&get_ccm(\$datei_ccm, \@auswahl_typ);

#ABGLEICH SG - CCM
@copy_ccm = @ccm;
@copy_softguard = @softguard;
&abgleich_id();
&abgleich_snr();
&abgleich_dns();
&abgleich_dns_ipname();
&abgleich_snr_cabletron();

       &get_bool_auswahl();
       for ($i=0; $i<26; $i++) {       #Ueberschriftenzeile erzeugen
               push @ueberschrift, $vorgabe_ueberschrift[$i] if ($boolean_auswahl[$i] eq "1");
       }
       
       &make_html();
       &make_excel(\$datum, \$zeit);

exit(0);

}







Der Excel-Schnipsel:

####################################################################################################################################
#  Funktion zum Erstellen der Excel Datei für die einzelnen Komponenten aus CCM
####################################################################################################################################
sub make_excel{
my ($tmp_datum, $tmp_zeit) = @_;
my $dateiname = 'auswahl_abgleich.xls';                #Variable fuer den Dateiname
my $workbook; #Arbeitsmappe in Excel
my $worksheet; #Arbeitsblatt in Excel
my $format_ueberschrift;        #Format fuer Ueberschriften
my $format_std; #Format fuer Standardtabellenschrift
my $format_tab_kopf;         #Format fuer Tabellenkopf
my $i; #Laufvariable fuer Schleife
my $zeile=4; #Aktuelle Zeile, in die geschrieben wird (4 als Start, da darüber der Kopf der Tabelle steht)
       my $anzahl_spalten;                                     #Anzahl der Spalten
       my $spalte = 0;

      chdir ("../zusatz/");

$workbook = Spreadsheet::WriteExcel->new($dateiname);
       $worksheet = $workbook->add_worksheet(); #Worksheet hinzufuegen

&def_format_excel (\$workbook, \$format_ueberschrift, \$format_std, \$format_tab_kopf);

$worksheet->write(0, 0, "Erstellt am $$tmp_datum um $$tmp_zeit", $format_ueberschrift);

$worksheet->set_row(1, 30); #Höhe von 1. Zeile auf 30 setzen
$worksheet->write(1, 0, "Devices Auswahl Abgleich CCM - Softguard", $format_ueberschrift);

#Tabellenkopfzeile (Zeile: 3) schreiben
$worksheet->set_row(3, 25, $format_tab_kopf); #Fuer Zeile 3 Höhe 25 sowie Format setzen
$worksheet->write_row(3, 0, \@ueberschrift);

       $anzahl_spalten = scalar@{$ergebnis[0]};
foreach (@ergebnis) {

        for ($i=0; $i <26; $i++) {
                       if ($boolean_auswahl[$i] eq "1") {
                    $worksheet->write($zeile, $spalte, $_->[$i], $format_std);
                               $spalte++;
                       }
}
$zeile++;
}
}#Ende excel_abgleich


Edit by Erik: Code Tags eingefügt.\n\n

<!--EDIT|[E|B]|1087300379-->
Taulmarill
 2004-06-15 16:18
#2888 #2888
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
hm, zwei vermutungen:

1. du gibtst nur den dateinamen ohne pfad an. schreibt das cgi evtl. in einen anderen pfad?
2. das cgi wird vom apache ausgeführt, damit hat es auch nur die rechte des apache. reichen die, um eine datei zu schreiben?

schau dir mal die error.log von deinem webserver an, evtl. steht da ein hinweis.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
renee
 2004-06-16 01:44
#2889 #2889
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vielleicht hilft auch das weiter:
Quote
You can also pass a valid filehandle to the new() constructor. For example in a CGI program you could do something like this:

binmode(STDOUT);
my $workbook = Spreadsheet::WriteExcel->new(\*STDOUT);
The requirement for binmode() is explained below.

For CGI programs you can also use the special Perl filename '-' which will redirect the output to STDOUT:

my $workbook = Spreadsheet::WriteExcel->new('-');

Aus der Doku auf CPAN (http://search.cpan.org/~jmcnam....xcel.pm)
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
rucksl
 2004-06-16 10:16
#2890 #2890
User since
2004-06-15
13 Artikel
BenutzerIn
[default_avatar]
So, jetzt läufts.
Es waren wirklich die Apache - Rechte.

Danke für den Tipp!
<< >> 6 Einträge, 1 Seite



View all threads created 2004-06-15 15:22.