CalcAutomation/de
Zurück zur Office Automation.\
=Calc=
==Benötigte Units==
uses
..., ComObj, Variants, LazUtf8, ...;Aufbau einer Steuerung für die Anwendung Calc
==Erstellen eines neuen Sheets und Speichern unter einem neuen Namen==
...
var
// Reservieren des Speichers
varCLApp: OleVariant;
varDesktop: OleVariant;
varSheets: OleVariant;
varSheet1: OleVariant;
varDokument: OleVariant;
varLoadParams: OleVariant;
strDateiname: shortstring; // nur Literale und Shortstrings sind automatisierbar
begin
// Erstellt das OleObjekt und erstellt den Zeiger darauf
varCLApp := CreateOleObject('com.sun.star.ServiceManager');
// Erstellt den Zeiger auf den Officedesktop
varDesktop := varCLApp.createInstance('com.sun.star.frame.Desktop');
// Erstellt ein leeres Array das für die Dokumentenerstellung benötigt wird
varLoadParams := VarArrayCreate([0, -1], varVariant);
// Erstellt ein neues (leeres) Dokument (Workbook) und setzt den Zeiger darauf
varDokument := varDesktop.LoadComponentFromURL('private:factory/scalc','_blank',0, varLoadParams);
// Erstellt den Zeiger auf die Sheets
varSheets := varDokument.getSheets();
// Erstellt den Zeiger auf ein einzelnes Sheet
varSheet1 := varSheets.getByIndex(0);
...
// Variante 1:
// Speichert das Dokument unter einem neuen Namen
varDokument.StoreAsURL('file:///D:/test.ods', varLoadParams);
// Variante 2:
// Speichert das Dokument mit Umlauten im neuen Dateinamen
strDateiname := 'file:///D:/' + Utf8ToSys('täst.ods');
varDokument.StoreAsURL(strDateiname, varLoadParams);
// Schliesst das Dokument
varDokument.close(True);
//Beendet die Anwendung
varDesktop.terminate;
// Freigabe des Speichers
varCLApp := UnAssigned;
varDesktop := UnAssigned;
varSheets := UnAssigned;
varSheet1 := UnAssigned;
varDokument := UnAssigned;
varLoadParams := UnAssigned;
end;Öffnen eines vorhandenen Sheets und Speichern des Sheets
...
var
varCLApp: OleVariant;
varDesktop: OleVariant;
varSheets: OleVariant;
varSheet1: OleVariant;
varDokument: OleVariant;
varLoadParams: OleVariant;
begin
// Erstellt das OleObjekt und erstellt den Zeiger darauf
varCLApp := CreateOleObject('com.sun.star.ServiceManager');
// Erstellt den Zeiger auf den Officedesktop
varDesktop := varCLApp.createInstance('com.sun.star.frame.Desktop');
// Erstellt ein leeres Array das für die Dokumentenerstellung benötigt wird
varLoadParams := VarArrayCreate([0, -1], varVariant);
// Öffnet ein vorhandenes Dokument (Workbook) und setzt den Zeiger darauf
varDokument := varDesktop.LoadComponentFromURL('file:///D:/TestDatei.ods','_blank',0, varLoadParams);
// Erstellt den Zeiger auf die Sheets
varSheets := varDokument.getSheets();
// Erstellt den Zeiger auf ein einzelnes Sheet
varSheet1 := varSheets.getByIndex(0);
...
// Speichert die Datei unter ihrem aktuellen Namen
varDokument.store;
varDokument.close(True);
varDesktop.terminate; //Beendet die Anwendung
varCLApp := UnAssigned;
varDesktop := UnAssigned;
varSheets := UnAssigned;
varSheet1 := UnAssigned;
varDokument := UnAssigned;
varLoadParams := UnAssigned;
end;Zellen und Ranges
==Zellen adressieren== Beide Adressierungsmethoden sprechen die selbe Zelle an und liefern damit das selbe Ergebnis.\
...
// Schreibt in einen Bereich (eine Zelle) einen Wert
// Der Berich ist der Name der Zelle z. B. A1
varSheet1.getCellRangeByName('A1').setString('Txt 1');
// schreibt in eine Zelle einen Wert
// die Zählung der Zellen begint bei (0,0)
// die Schreibweise lautet (Spalte, Zeile)
varSheet1.getCellByPosition(0,0).setString('Txt 1');
...Arbeiten mit Umlauten
Für die Verwendung von Umlauten usw. muss für die Stringkonvertierung die Unit lclproc eingebunden werden.
var
...
// zu beachten ist, dass der Übergabestring vom Datentyp Widestring sein muss
wstrUebergabe: WideString;
...
begin
...
// ohne den Puffer 'wstrUebergabe' kommt es bei der Verwendung von 'UTF8ToUTF16' zu Fehlern
wstrUebergabe := UTF8ToUTF16('Bücher');
varSheet1.getCellRangeByName('B2').setString(wstrUebergabe);
// die Schreibweise:
// varSheet1.getCellRangeByName('B2').setString(Utf8ToUtf16('Bücher'));
// führt zu Fehlern
...
end;==Strings einfügen==
var
...
// Hilfsvariable
wstrUebergabe: WideString;
begin
...
wstrUebergabe := utf8toutf16('Bücher');
varSheet1.getCellRangeByName('B2').setString(wstrUebergabe);
wstrUebergabe := utf8toutf16('Lesezeichen');
varSheet1.getCellRangeByName('B3').setString(wstrUebergabe);
...
end;Zahlen einfügen
var
...
// Hilfsvariable
wstrUebergabe: WideString;
begin
...
varSheet1.getCellRangeByName('C2').setValue(4);
varSheet1.getCellRangeByName('C3').setValue(1);
varSheet1.getCellRangeByName('C4').setValue(2);
...
end;Formeln einfügen
var
...
// Hilfsvariable
wstrUebergabe: WideString;
begin
...
wstrUebergabe := utf8toutf16('=C2*D2');
varSheet1.getCellRangeByName('E2').setFormula(wstrUebergabe);
wstrUebergabe := utf8toutf16('=C3*D3');
varSheet1.getCellRangeByName('E3').setFormula(wstrUebergabe);
wstrUebergabe := utf8toutf16('=C4*D4');
varSheet1.getCellRangeByName('E4').setFormula(wstrUebergabe);
...
end;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.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
