Sign in Join
Wiki copytemporary

CalcAutomation/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: CalcAutomation/de

OldNewLine
1+\
2+Zurück zur [[Office Automation/de|Office Automation]].\
3+\
4+\
5+=Calc=\
6+==Benötigte Units==
7+
8+``` pascal
9+uses
10+ ..., ComObj, Variants, LazUtf8, ...;
11+```
12+
13+# Aufbau einer Steuerung für die Anwendung Calc
14+
15+\
16+==Erstellen eines neuen Sheets und Speichern unter einem neuen Namen==
17+
18+``` pascal
19+
20+ ...
21+var
22+ // Reservieren des Speichers
23+ varCLApp: OleVariant;
24+ varDesktop: OleVariant;
25+ varSheets: OleVariant;
26+ varSheet1: OleVariant;
27+ varDokument: OleVariant;
28+ varLoadParams: OleVariant;
29+ strDateiname: shortstring; // nur Literale und Shortstrings sind automatisierbar
30+
31+begin
32+ // Erstellt das OleObjekt und erstellt den Zeiger darauf
33+ varCLApp := CreateOleObject('com.sun.star.ServiceManager');
34+
35+ // Erstellt den Zeiger auf den Officedesktop
36+ varDesktop := varCLApp.createInstance('com.sun.star.frame.Desktop');
37+ // Erstellt ein leeres Array das für die Dokumentenerstellung benötigt wird
38+ varLoadParams := VarArrayCreate([0, -1], varVariant);
39+ // Erstellt ein neues (leeres) Dokument (Workbook) und setzt den Zeiger darauf
40+ varDokument := varDesktop.LoadComponentFromURL('private:factory/scalc','_blank',0, varLoadParams);
41+ // Erstellt den Zeiger auf die Sheets
42+ varSheets := varDokument.getSheets();
43+ // Erstellt den Zeiger auf ein einzelnes Sheet
44+ varSheet1 := varSheets.getByIndex(0);
45+
46+ ...
47+
48+ // Variante 1:
49+ // Speichert das Dokument unter einem neuen Namen
50+ varDokument.StoreAsURL('file:///D:/test.ods', varLoadParams);
51+
52+ // Variante 2:
53+ // Speichert das Dokument mit Umlauten im neuen Dateinamen
54+ strDateiname := 'file:///D:/' + Utf8ToSys('täst.ods');
55+ varDokument.StoreAsURL(strDateiname, varLoadParams);
56+
57+ // Schliesst das Dokument
58+ varDokument.close(True);
59+ //Beendet die Anwendung
60+ varDesktop.terminate;
61+
62+ // Freigabe des Speichers
63+ varCLApp := UnAssigned;
64+ varDesktop := UnAssigned;
65+ varSheets := UnAssigned;
66+ varSheet1 := UnAssigned;
67+ varDokument := UnAssigned;
68+ varLoadParams := UnAssigned;
69+end;
70+```
71+
72+\
73+
74+## Öffnen eines vorhandenen Sheets und Speichern des Sheets
75+
76+``` pascal
77+ ...
78+var
79+ varCLApp: OleVariant;
80+ varDesktop: OleVariant;
81+ varSheets: OleVariant;
82+ varSheet1: OleVariant;
83+ varDokument: OleVariant;
84+ varLoadParams: OleVariant;
85+
86+begin
87+ // Erstellt das OleObjekt und erstellt den Zeiger darauf
88+ varCLApp := CreateOleObject('com.sun.star.ServiceManager');
89+ // Erstellt den Zeiger auf den Officedesktop
90+ varDesktop := varCLApp.createInstance('com.sun.star.frame.Desktop');
91+ // Erstellt ein leeres Array das für die Dokumentenerstellung benötigt wird
92+ varLoadParams := VarArrayCreate([0, -1], varVariant);
93+ // Öffnet ein vorhandenes Dokument (Workbook) und setzt den Zeiger darauf
94+ varDokument := varDesktop.LoadComponentFromURL('file:///D:/TestDatei.ods','_blank',0, varLoadParams);
95+ // Erstellt den Zeiger auf die Sheets
96+ varSheets := varDokument.getSheets();
97+ // Erstellt den Zeiger auf ein einzelnes Sheet
98+ varSheet1 := varSheets.getByIndex(0);
99+
100+ ...
101+
102+ // Speichert die Datei unter ihrem aktuellen Namen
103+ varDokument.store;
104+ varDokument.close(True);
105+ varDesktop.terminate; //Beendet die Anwendung
106+
107+ varCLApp := UnAssigned;
108+ varDesktop := UnAssigned;
109+ varSheets := UnAssigned;
110+ varSheet1 := UnAssigned;
111+ varDokument := UnAssigned;
112+ varLoadParams := UnAssigned;
113+end;
114+```
115+
116+\
117+
118+# Zellen und Ranges
119+
120+\
121+==Zellen adressieren== Beide Adressierungsmethoden sprechen die selbe Zelle an und liefern damit das selbe Ergebnis.\
122+
123+``` pascal
124+ ...
125+ // Schreibt in einen Bereich (eine Zelle) einen Wert
126+ // Der Berich ist der Name der Zelle z. B. A1
127+ varSheet1.getCellRangeByName('A1').setString('Txt 1');
128+ // schreibt in eine Zelle einen Wert
129+ // die Zählung der Zellen begint bei (0,0)
130+ // die Schreibweise lautet (Spalte, Zeile)
131+ varSheet1.getCellByPosition(0,0).setString('Txt 1');
132+ ...
133+```
134+
135+\
136+
137+## Arbeiten mit Umlauten
138+
139+Für die Verwendung von Umlauten usw. muss für die Stringkonvertierung die Unit lclproc eingebunden werden.
140+
141+``` pascal
142+var
143+ ...
144+ // zu beachten ist, dass der Übergabestring vom Datentyp Widestring sein muss
145+ wstrUebergabe: WideString;
146+ ...
147+begin
148+ ...
149+ // ohne den Puffer 'wstrUebergabe' kommt es bei der Verwendung von 'UTF8ToUTF16' zu Fehlern
150+ wstrUebergabe := UTF8ToUTF16('Bücher');
151+ varSheet1.getCellRangeByName('B2').setString(wstrUebergabe);
152+ // die Schreibweise:
153+ // varSheet1.getCellRangeByName('B2').setString(Utf8ToUtf16('Bücher'));
154+ // führt zu Fehlern
155+ ...
156+end;
157+```
158+
159+\
160+==Strings einfügen==
161+
162+``` pascal
163+var
164+ ...
165+ // Hilfsvariable
166+ wstrUebergabe: WideString;
167+begin
168+ ...
169+ wstrUebergabe := utf8toutf16('Bücher');
170+ varSheet1.getCellRangeByName('B2').setString(wstrUebergabe);
171+ wstrUebergabe := utf8toutf16('Lesezeichen');
172+ varSheet1.getCellRangeByName('B3').setString(wstrUebergabe);
173+ ...
174+end;
175+```
176+
177+\
178+
179+## Zahlen einfügen
180+
181+``` pascal
182+var
183+ ...
184+ // Hilfsvariable
185+ wstrUebergabe: WideString;
186+begin
187+ ...
188+ varSheet1.getCellRangeByName('C2').setValue(4);
189+ varSheet1.getCellRangeByName('C3').setValue(1);
190+ varSheet1.getCellRangeByName('C4').setValue(2);
191+ ...
192+end;
193+```
194+
195+\
196+
197+## Formeln einfügen
198+
199+``` pascal
200+var
201+ ...
202+ // Hilfsvariable
203+ wstrUebergabe: WideString;
204+begin
205+ ...
206+ wstrUebergabe := utf8toutf16('=C2*D2');
207+ varSheet1.getCellRangeByName('E2').setFormula(wstrUebergabe);
208+ wstrUebergabe := utf8toutf16('=C3*D3');
209+ varSheet1.getCellRangeByName('E3').setFormula(wstrUebergabe);
210+ wstrUebergabe := utf8toutf16('=C4*D4');
211+ varSheet1.getCellRangeByName('E4').setFormula(wstrUebergabe);
212+ ...
213+end;
214+```
215+
216+---
217+*From the Free Pascal wiki, page "CalcAutomation/de", as it stood on 2020-02-10 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history