Sign in Join
Wiki copytemporary

CalcAutomation/de

Zurück zur Office Automation.\

=Calc=
==Benötigte Units==

pascal
uses
  ..., ComObj, Variants, LazUtf8, ...;

Aufbau einer Steuerung für die Anwendung Calc

==Erstellen eines neuen Sheets und Speichern unter einem neuen Namen==

pascal

  ...
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

pascal
  ...
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.\

pascal
  ...
  // 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.

pascal
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==

pascal
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

pascal
var
  ...
  // Hilfsvariable
  wstrUebergabe: WideString;
begin
  ...
  varSheet1.getCellRangeByName('C2').setValue(4);
  varSheet1.getCellRangeByName('C3').setValue(1);
  varSheet1.getCellRangeByName('C4').setValue(2);
  ...
end;

Formeln einfügen

pascal
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.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.