Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Excel Sheet mit Formel ausfüllen
WayneSchlegel67 - Di 26.12.06 18:05
Titel: Excel Sheet mit Formel ausfüllen
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 - 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 - 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 - 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
WayneSchlegel67 - 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.
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 MyIni := TIniFile.Create(FlatEdit1.Text); oXL := CreateOleObject('Excel.Application'); oXL.Visible := True; oWB := oXL.Workbooks.Add; oSheet := oWB.ActiveSheet; 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'; 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
raziel: Delphi-Tags hinzugefügt
WayneSchlegel67 - 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 - Di 26.12.06 22:39
Hallo nochmal
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
WayneSchlegel67 - Di 26.12.06 22:48
Keldorn hat folgendes geschrieben: |
Hallo nochmal
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 - 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 - 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 - 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
Delete - 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 - 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 - Sa 30.12.06 12:13
WayneSchlegel67 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???
WayneSchlegel67 - Sa 30.12.06 12:16
hast ja Recht ! :-(
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!