CalcAutomation/de

From Free Pascal wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Deutsch (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;