User since
2006-04-26
23
Artikel
BenutzerIn
hallo zusammen,
ich muss in der arbeit tägliche checks die daten in eine exceldatei per hand schreibt mit perl automatisieren. die exceldatei wir zur langzeitentwichlung und statistikzwecken geführt.
ich habe jeden tag eine zeile mit ca. 20 werten die sich jeden tag ändern, also jeden tag eine zeile. jetzt will ich ein script aufsetzen das die daten abfragt und in variablen speichert (soweit hab ich es schon).
nun mein problem ist es jetzt diese exceldatei mit perl weiterzuführen. also perl müsste jetzt die letzte zeile bzw. die nächste freie zeile ausfindig machen und die werte die mit dem schon vorhandenen script ausgelesen wurden in die entsprechende nächste zeile und in die entsprechenden spalte schreiben und dann die datei wieder speichern.
wie mache ich das am besten?
kann mir da wer dabei helfen?
gruß
zieglerch
User since
2005-01-17
14759
Artikel
Admin1
Spreadsheet-SimpleExcel
Spreadsheet-ParseExcel
Oder mit
Win32-OLE Excel selber steuern\n\n
<!--EDIT|GwenDragon|1150917936-->
User since
2006-04-26
23
Artikel
BenutzerIn
ok ich denke dann ist
CPAN: Spreadsheet-SimpleExcel
CPAN: Spreadsheet-ParseExcel
besser für mein vorhaben werde ich ma testen.
wie ermittle ich dann die nächste leere zeile in einer exceldatei?
damit ich keine daten überschreibe sondern jeden tag immer die nächste freie zeile mit daten befüllen kann.
gruß
zieglerch
User since
2003-08-04
14371
Artikel
ModeratorIn
Mit
Spreadsheet::SimpleExcel kann man bestehende Excel-Files noch nicht erweitern. Da wollte ich mich schon ne ganze Weile mal dransetzen...
User since
2006-04-26
23
Artikel
BenutzerIn
ok, wenn es mit dem "CPAN: Spreadsheet-SimpleExcel" nicht geht, kann ich es dann alleine mt dem "CPAN: Spreadsheet-ParseExcel" machen?
gruß
zieglerch
User since
2003-08-07
2921
Artikel
BenutzerIn
Du kannst die alte Datei, die zu als EIngabedatei verwendet hast löschen und eine neue Datei erstellen. Die Datei weiterführen (was finde ich besser ist, wenn Menschan daran arbeiten) kannst du nur mit Win32::OLE. Letzteres ist quasi VBA mit den Vorzügen von Perl (oder andersherum).
User since
2006-04-26
23
Artikel
BenutzerIn
ok dann müsste also der code was für mich sein wenn ich einzelne daten / variablen in bestimte zellen schreiben will (nur mal eben zusammenkopiert und noch nicht getestet aber so stelle ich es mir vor)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use Win32::OLE;
# use existing instance if Excel is already running
eval {$ex = Win32::OLE->GetActiveObject('Excel.Application')};
die "Excel not installed" if $@;
unless (defined $ex) {
$ex = Win32::OLE->new('Excel.Application', sub {$_[0]->Quit;})
or die "Oops, cannot start Excel";
}
# write to a particular cell
$sheet = $book->Worksheets(1);
$sheet->Cells(1,1)->{Value} = "foo";
# save and exit
$book->SaveAs( 'test.xls' );
undef $book;
undef $ex;
bleibt nur noch die frage wie ich rausfinde welche zeile die letzte ist die ich beschreiben muss?
gruß
zieglerch
User since
2003-08-04
5872
Artikel
ModeratorIn
[quote=renee,21.06.2006, 21:49]Mit
Spreadsheet::SimpleExcel kann man bestehende Excel-Files noch nicht erweitern. Da wollte ich mich schon ne ganze Weile mal dransetzen...[/quote]
Dann wird es aber nicht mehr "Simple" sein ;)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2006-05-09
76
Artikel
BenutzerIn
die letzte zeile und spalte bekommst du so:
my $last_row = $sheet->UsedRange->Find( { What => "*", SearchDirection => xlPrevious, SearchOrder => xlByRows } )->{Row};
my $last_col = $sheet->UsedRange->Find( { What => "*", SearchDirection => xlPrevious, SearchOrder => xlByRows } )->{Column};