Difference between revisions of "CalcAutomation/de"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category already in page template)
 
(15 intermediate revisions by 2 users not shown)
Line 7: Line 7:
 
=Calc=
 
=Calc=
 
<br>
 
<br>
 +
==Benötigte Units==
 +
<syntaxhighlight lang="pascal">
 +
uses
 +
  ..., ComObj, Variants, LazUtf8, ...;
 +
</syntaxhighlight>
 +
 
=Aufbau einer Steuerung für die Anwendung Calc=
 
=Aufbau einer Steuerung für die Anwendung Calc=
 
<br>
 
<br>
==Erstellen eines neuen Sheets und speichern unter einem neuen Namen==
+
==Erstellen eines neuen Sheets und Speichern unter einem neuen Namen==
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 +
 
 
   ...
 
   ...
 
var
 
var
Line 20: Line 27:
 
   varDokument: OleVariant;
 
   varDokument: OleVariant;
 
   varLoadParams: OleVariant;
 
   varLoadParams: OleVariant;
 +
  strDateiname: shortstring; // nur Literale und Shortstrings sind automatisierbar
  
 
begin
 
begin
Line 38: Line 46:
 
   ...
 
   ...
  
 +
  // Variante 1:
 
   // Speichert das Dokument unter einem neuen Namen
 
   // Speichert das Dokument unter einem neuen Namen
   varDokument.storeAsURL('file:///D:/test.ods', varLoadParams);
+
   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
 
   // Schliesst das Dokument
 
   varDokument.close(True);
 
   varDokument.close(True);
Line 56: Line 72:
 
<br>
 
<br>
  
==Öffnen eines vorhandenen Sheets und speichern des Sheets==
+
==Öffnen eines vorhandenen Sheets und Speichern des Sheets==
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
   ...
 
   ...
 
var
 
var
Line 98: Line 114:
 
<br>
 
<br>
  
 +
=Zellen und Ranges=
 +
<br>
 
==Zellen adressieren==
 
==Zellen adressieren==
 
Beide Adressierungsmethoden sprechen die selbe Zelle an und liefern damit das selbe Ergebnis.<br>
 
Beide Adressierungsmethoden sprechen die selbe Zelle an und liefern damit das selbe Ergebnis.<br>
<syntaxhighlight>
+
<syntaxhighlight lang="pascal">
 
   ...
 
   ...
 
   // Schreibt in einen Bereich (eine Zelle) einen Wert
 
   // Schreibt in einen Bereich (eine Zelle) einen Wert
Line 112: Line 130:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
 +
 
==Arbeiten mit Umlauten==
 
==Arbeiten mit Umlauten==
<syntaxhighlight>
+
Für die Verwendung von Umlauten usw. muss für die Stringkonvertierung die Unit lclproc eingebunden werden.
 +
<syntaxhighlight lang="pascal">
 
var
 
var
 
   ...
 
   ...
 +
  // zu beachten ist, dass der Übergabestring vom Datentyp Widestring sein muss
 
   wstrUebergabe: WideString;
 
   wstrUebergabe: WideString;
 
   ...
 
   ...
Line 128: Line 149:
 
   ...
 
   ...
 
end;
 
end;
</syntaxhighlight>  
+
</syntaxhighlight>
 +
<br>
 +
==Strings einfügen==
 +
<syntaxhighlight lang="pascal">
 +
var
 +
  ...
 +
  // Hilfsvariable
 +
  wstrUebergabe: WideString;
 +
begin
 +
  ...
 +
  wstrUebergabe := utf8toutf16('Bücher');
 +
  varSheet1.getCellRangeByName('B2').setString(wstrUebergabe);
 +
  wstrUebergabe := utf8toutf16('Lesezeichen');
 +
  varSheet1.getCellRangeByName('B3').setString(wstrUebergabe);
 +
  ...
 +
end;
 +
</syntaxhighlight>
 
<br>
 
<br>
 +
 +
==Zahlen einfügen==
 +
<syntaxhighlight lang="pascal">
 +
var
 +
  ...
 +
  // Hilfsvariable
 +
  wstrUebergabe: WideString;
 +
begin
 +
  ...
 +
  varSheet1.getCellRangeByName('C2').setValue(4);
 +
  varSheet1.getCellRangeByName('C3').setValue(1);
 +
  varSheet1.getCellRangeByName('C4').setValue(2);
 +
  ...
 +
end;
 +
</syntaxhighlight>
 
<br>
 
<br>
--[[User:Olaf|Olaf]] 13:31, 6 October 2012 (UTC)
+
 
[[Category:Tutorials/de]]
+
==Formeln einfügen==
 +
<syntaxhighlight lang="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;
 +
</syntaxhighlight>

Latest revision as of 00:30, 11 February 2020

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;