Autor Beitrag
WayneSchlegel67
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 26.12.06 18:05 
Hallo Ihrs
Frohe Weihnachten wünsche ich !

Ich habe folgendes Problem:
Ich möchte über ein Object Pascal Programm eine Excel Tabelle erzeugen und ausfüllen.
Soweit so gut ...klappt auch alles ...nur eine wichtige Formel die ich benötige um Zeitwerte
aufzurunden,

oRng.formula := '=AUFRUNDEN(B6*48;0)/48';

lässt sich nicht einfügen und es gibt ne Exception.
Ich vermute Schuld daran ist das erste Semikolon, ohne daß Excel die Formel aber nicht akzeptiert.
Ich habe auch schon versucht das Semikolon über #59 einzufügen oder ähnliches ...Delphi nimmt die Formel natürlich immer an (weil Datentyp Variant) ..iss klar ....aber Excel füllt das Workbook nach dem ersten Fehler nicht mehr weiter aus. Manuell in Excel eingetragen ist die Tabelle okay. Ob der Compiler nach dem ersten Semikolon ein Zeilenende vermutet und den String abschneidet ?
Kann mir jemand nen Tip geben was an der Syntax falsch ist ?

Gruß
M.
aim65
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 312

Win 9x, Win XP
Delphi 3pro, 7PE
BeitragVerfasst: Di 26.12.06 18:35 
Ich glaube nicht, daß es am Compiler liegt. Bei mir (D3) wird der String komplett abgebildet (hab's einfach mit 'nem panel.caption probiert). Dürfte an etwas anderem liegen. Mit Excel-Anbindung hab ich keine Erfahrung.
Michael Stenzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 133


D3 Prof, D7 PE
BeitragVerfasst: Di 26.12.06 20:04 
Hi WayneSchlegel67.

Ist oRng ein Range Object oder ein sonstiger Zellbezug?

Vieleicht postes Du ein bischen mehr Quellcode.

Gruß
Michael.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 26.12.06 20:15 
Hallo,

die Formeln mußt du englisch übergeben. Wenn du die englsichen Namen nicht weißt, google mal ein wenig, da gibts einige Tabellen im Inet.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
WayneSchlegel67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 26.12.06 20:53 
Dank Euch Männer !
Ich hab das vor fast 8 Jahren schonmal gemacht aber es will mir einfdach nicht mehr einfallen
oRange oder oRng ist von Datentyp her Variant.
Hier mal ein wenig mehr Code ...vielleicht findet es ja einer von Euch oder ich bin einfach nur zu blind ?

@Keldorn: Meinst du es liegt an Ausdruck: Aufrunden ? Werde ich mal versuchen !!!!

M.
p.s: Das ist natürlich kein toller code...aber er soll mir nur arbeit ersparen. Wir müssen auf der arbeit jetzt auf einmal nachträglich unsere verrichteten Stunden gewissen Aufgaben zuordnen. Da ich die Arbeitszeiten schon per Delphi Progreamm (Rechnerstart) erfasst habe möchte ich die nun einfach per Tabelle auswerten. Sonst hätt ich da ewig mit zu tun ;-)

Diesen Code hab ich vor einigen Jahren mal erzeugt und nun für die neue Firma angepasst.

ausblenden volle Höhe Delphi-Quelltext
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:
procedure TForm1.Button1Click(Sender: TObject);
   var
     oXL, oWB, oSheet, oRng, VArray : Variant;
     i, k: integer;
     MyIni: TInifile;
   begin
        // Start von Excel und Aufrufen eines Anwendungsobjektes
     MyIni := TIniFile.Create(FlatEdit1.Text);
     oXL := CreateOleObject('Excel.Application');
     oXL.Visible := True;
     // Neue Arbeitsmappe erzeugen
     oWB := oXL.Workbooks.Add;
     oSheet := oWB.ActiveSheet;
     // Tabellenüberschriften Zelle für Zelle hinzufügen
     oSheet.Cells[5,1] := 'Tag';
     oSheet.Cells[5,2] := 'Kommt';
     oSheet.Cells[5,3] := 'Kommt zählt ab';
     oSheet.Cells[5,4] := 'Geht';
     oSheet.Cells[5,5] := 'Stunden Soll';
     oSheet.Cells[5,6] := 'Stunden Ist';
     oSheet.Cells[5,7] := 'Ergebnis';
     // Formatieren von A1:D1 als fett, vertikale Ausrichtung = zentriert
     oSheet.Range['A5:G5'].Font.Bold := True;
     oSheet.Range['A5:G5'].VerticalAlignment := xlVAlignCenter;

   for I:=0 to FlatListBox1.Items.count-1 do
   begin
   osheet.cells[6+I,1] :=  FlatListBox1.Items[I];
   osheet.cells[6+I,2] := MyIni.ReadString(FlatListbox1.Items[I],'START''Error');
   oRng :=osheet.range['C6:C12'];
   oRng.formula := '=AUFRUNDEN(B6*48;0)/48';
   osheet.cells[6+I,4] := MyIni.ReadString(FlatListbox1.Items[I],'FINISH''Error');
   end;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
WayneSchlegel67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 26.12.06 21:01 
habs gerade ausprobiert: heisst tatsächlich, wie schon vermutet: Roundup ...funzt aber leider net. Ich werde weich...was mich das schon an stunden des ausprobierens gekostet hat...wenn ich für jede einen euro hätt... :-\
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 26.12.06 22:39 
Hallo nochmal
ausblenden Delphi-Quelltext
1:
oRng.formula := '=Roundup(B6*48,0)/48';					


englische namen und komma statt semikolon.

Warum setzt du die Formel in der schleife? irgendwie doppelt gemoppelt, wenn Du range verwendest und somit mit einem mal allen Zellen die Formel zuweißt.

Gruß Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
WayneSchlegel67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 26.12.06 22:48 
user profile iconKeldorn hat folgendes geschrieben:
Hallo nochmal
ausblenden Delphi-Quelltext
1:
oRng.formula := '=Roundup(B6*48,0)/48';					


englische namen und komma statt semikolon.

Warum setzt du die Formel in der schleife? irgendwie doppelt gemoppelt, wenn Du range verwendest und somit mit einem mal allen Zellen die Formel zuweißt.

Gruß Frank



Naja ich probiere noch ob Excel auch die Zellbezüge mitnimmt oder ob ich üder die Formel die Zellbezüge verändern muss. Ursprünglich habe ich noch den integerwert I hinzuaddiert. wenn ich das jedoch nicht brauche dann werd ich das auch der schleife wieder herausnehmen...iss doch klar. Trotzdem danke für deine hilfe !!! Probiere ich gleich mal aus und poste das ergebnis
M.
WayneSchlegel67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Di 26.12.06 22:51 
Jau hat hingehauen ! Du bist klasse !!!!
und die zellbezüge nimmt er auch mit !!!! endlich gehts weiter hier...und dabei wars so einfach,....
danke !!!
M.
WayneSchlegel67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 30.12.06 11:31 
Hallo Freunde der Nacht ;-)

kann mir vielleicht einer von Euch sagen was ich hier wieder falsch gemacht habe ?
Ich will diese Formel auch in ein Excel sheet exportieren. Excel rechnet damit aber beim übergeben der Formel aus dem Delphi Programm heraus wirds wohl anders interpretiert. Doof ist auch der Wert mit der Kommastelle.
Kann wer helfen ?


Gruß
M

=WENN(WOCHENTAG(A11;2)=5;5;7,5)
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 30.12.06 11:35 
erstmal kommastelle weglassen und so machen, wie oben beschrieben. Wenn das geht, statt dem Komma einen Punkt setzen.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 30.12.06 11:58 
hallo wayne,

einfach extras->makros->aufzeichnen --> deine formel --> aufzeichnung beenden --> Alt-F11

und schon siehste: ActiveCell.FormulaR1C1 = "=IF(WEEKDAY(R[7]C,2)=5,5,7.5)"

das ganze kannste dann mit cut&pase in dein progry übernehmen. <HTH>
WayneSchlegel67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 30.12.06 12:00 
oRng.formula := '=WENN(WOCHENTAG(A11,2)=5,5,7.5)';
So hatte ichs geschrieben als Code, iss aber wohl eher ein Excel Problem wie sich jetzt herausgestellt hat.
Trotzdem danke vielmals !
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 30.12.06 12:13 
user profile iconWayneSchlegel67 hat folgendes geschrieben:
oRng.formula := '=WENN(WOCHENTAG(A11,2)=5,5,7.5)';

*kopfschüttel*
konnte ja nicht gehen. wenn ich dir oben 2xschreibe, Du sollst die Befehle Englisch schreiben ... wieso fängst du dann hier wieder mit wenn und Wochentag an???

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
WayneSchlegel67 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 30.12.06 12:16 
hast ja Recht ! :-(