Difference between revisions of "WordAutomation/de"

From Lazarus wiki
Jump to navigationJump to search
 
(29 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
{{WordAutomation}}
 
{{WordAutomation}}
 +
<br>
 +
Zurück zur [[Office Automation/de|Office Automation]].<br>
 
<br>
 
<br>
 
__TOC__
 
__TOC__
Line 11: Line 13:
 
<br>
 
<br>
 
Beispiel:<br>
 
Beispiel:<br>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
unit
 
unit
 
   ComObj, lclproc;
 
   ComObj, lclproc;
Line 17: Line 19:
 
<br>
 
<br>
 
<br>
 
<br>
 
 
=Speicherplatz für Word und Worddokument reservieren=
 
=Speicherplatz für Word und Worddokument reservieren=
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
var
 
var
 
   varWdApp: oleVariant;      // Reserviert Speicher für die Programmsteuerung
 
   varWdApp: oleVariant;      // Reserviert Speicher für die Programmsteuerung
Line 27: Line 28:
 
=Wordsteuerung=
 
=Wordsteuerung=
 
==Word OleObjekt erstellen==
 
==Word OleObjekt erstellen==
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 40: Line 41:
 
<br>
 
<br>
 
==Word Version ermitteln==
 
==Word Version ermitteln==
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 49: Line 50:
 
<br>
 
<br>
 
==Word beenden und Speicher freigeben==
 
==Word beenden und Speicher freigeben==
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 60: Line 61:
 
==Die Sichtbarkeit von Word steuern==
 
==Die Sichtbarkeit von Word steuern==
 
Eine unsichtbare Anwendung verhindert  während der Automatisierung das Flackern des Bildschirms.<br>
 
Eine unsichtbare Anwendung verhindert  während der Automatisierung das Flackern des Bildschirms.<br>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 69: Line 70:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
 
 
==Word Screenupdating (Bildschirmaktualisierung)==
 
==Word Screenupdating (Bildschirmaktualisierung)==
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 81: Line 81:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Worddokument Eigenschaften festlegen==
+
==Sprache der Wordinstallation ermittlen==
Alle Eigenschaften des Worddokumentes können über ihren englischen Namen angesprochen werden.<br>
+
<syntaxhighlight lang=pascal>
<syntaxhighlight>
 
 
begin
 
begin
 
   ...
 
   ...
   varDokument.BuiltInDocumentProperties['Title'].Value := 'Testdokument';                // fügt den Dokumententitel ein
+
   if varWdApp.System.Country <> wdGermany then ...  // prüft, ob die Wordinstallation nicht Deutsch ist.
  varDokument.BuiltInDocumentProperties['Subject'].Value := 'Testdokumente';              // fügt das Thema ein
 
  varDokument.BuiltInDocumentProperties['Author'].Value := 'Testuser';                    // fügt den Ersteller ein
 
  varDokument.BuiltInDocumentProperties['Manager'].Value := 'Testmanager';                // fügt den verantwortlichen Manager ein
 
  varDokument.BuiltInDocumentProperties['Company'].Value := 'Testfirma';                  // fügt die Firma ein
 
  varDokument.BuiltInDocumentProperties['Category'].Value := 'Automatisationsbeispiele'; // fügt die Kategorie ein
 
  varDokument.BuiltInDocumentProperties['Comments'].Value := 'Erstes Muster';            // fügt einen Kommentar ein
 
 
   ...
 
   ...
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
 
 
=Text des Dokuments bearbeiten=
 
=Text des Dokuments bearbeiten=
==Worddokument erstellen==
+
==Neues Worddokument erstellen==
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 108: Line 100:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Worddokument öffnen==
+
==Vorhandenes Worddokument öffnen==
 
Es gibt mehrere Möglichkeiten ein Worddokument zu öffnen.<br>
 
Es gibt mehrere Möglichkeiten ein Worddokument zu öffnen.<br>
 
<br>
 
<br>
 
Beispiel 1:<br>
 
Beispiel 1:<br>
 
Ein Worddokument mit mehreren Parametern öffnen<br>
 
Ein Worddokument mit mehreren Parametern öffnen<br>
Alle Parameter ausser Parameter 1 sind optional<br>
+
Alle Parameter außer Parameter 1 sind optional<br>
 
# Parameter: Pfadname und Datename<br>
 
# Parameter: Pfadname und Datename<br>
 
#Parameter: False, wenn die Datei nicht in das aktuelle Wordformat konvertiert werden soll<br>
 
#Parameter: False, wenn die Datei nicht in das aktuelle Wordformat konvertiert werden soll<br>
Line 124: Line 116:
 
#Parameter:<br>
 
#Parameter:<br>
 
#Parameter: Das Dateikonvertierungsprogramm, das zum Öffnen des Dokuments verwendet werden soll. Der Standardwert ist wdOpenFormatAuto
 
#Parameter: Das Dateikonvertierungsprogramm, das zum Öffnen des Dokuments verwendet werden soll. Der Standardwert ist wdOpenFormatAuto
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 137: Line 129:
 
Beispiel 2:<br>
 
Beispiel 2:<br>
 
Ein Worddokument mit einem Umlaut usw. im Dateinamen öffnen<br>
 
Ein Worddokument mit einem Umlaut usw. im Dateinamen öffnen<br>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 146: Line 138:
 
<br>
 
<br>
 
Beispiel 3:<br>
 
Beispiel 3:<br>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 158: Line 150:
  
 
==Worddokument aktivieren==
 
==Worddokument aktivieren==
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 166: Line 158:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
 
+
==Text Cursor setzen==
==Worddokument Text einfügen==
+
<syntaxhighlight lang=pascal>
<syntaxhighlight>
+
begin
 +
  ...
 +
  varWdApp.Selection.EndKey(wdStory);      // Cursor bewegt sich zum Ende des Dokumentes
 +
  varWdApp.Selection.HomeKey(wdStory);      // Cursor bewegt sich zum Anfang des Dokumentes
 +
  varWdApp.Selection.MoveRight(wdWord);    // Cursor am Anfang des nächsten Wortes
 +
  varWdApp.Selection.MoveLeft(wdCharacter); // Cursor wird um ein Zeichen nach Links versetzt
 +
  varWdApp.Selection.Delete(wdCharacter);  // Löscht ein Zeichen rechts vom Cursor
 +
  varWdApp.Selection.MoveDown(wdParagraph); // Cursor bewegt sich zum Anfang des nächsten Abschnitts
 +
  ...
 +
end;
 +
</syntaxhighlight>
 +
<br>
 +
==Text in ein Worddokument einfügen==
 +
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
   varWdApp.Selection.TypeText(Text := 'Neuer Text. ');
+
   varWdApp.Selection.TypeText(UTF8Decode('Neuer Text'));
   varWdApp.Selection.TypeText(Text := UTF8ToUTF16('Zusätzlicher Text')); // Benötigt die Unit lclproc für die korrekte
+
   varWdApp.Selection.TypeText(UTF8Decode('Zusätzlicher Text')); // Benötigt die Unit lclproc für die korrekte
                                                                        // Umwandlung der Umlaute
+
                                                                // Umwandlung der Umlaute
  
 
   varWdApp.Selection.InsertAfter('Test');      // fügt im Worddokument nach der Cursorposition diesen Text ein
 
   varWdApp.Selection.InsertAfter('Test');      // fügt im Worddokument nach der Cursorposition diesen Text ein
Line 187: Line 192:
 
Beispiel 1:<br>
 
Beispiel 1:<br>
 
Ein Worddokument ohne Besonderheiten im Namen speichern.<br>
 
Ein Worddokument ohne Besonderheiten im Namen speichern.<br>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 198: Line 203:
 
Beispiel 2:<br>
 
Beispiel 2:<br>
 
Ein Worddokment mit Umlaut im Namen speichern.<br>
 
Ein Worddokment mit Umlaut im Namen speichern.<br>
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 207: Line 212:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
 +
Beispiel 3:<br>
 +
Ein Worddokument in einem anderen Datei-Format speichern.
 +
<syntaxhighlight lang=pascal>
 +
const
 +
  // Möglichkeiten wären u.a.
 +
  // https://docs.microsoft.com/de-de/office/vba/api/word.wdsaveformat
 +
  wdFormatDocument97 = 0;  // .doc format
 +
  wdFormatRTF = 6;
 +
  wdFormatHTML = 8;
 +
  wdFormatXML = 11;
 +
  wdFormatDocumentDefault = 16;  // .docx format
 +
  wdFormatPDF = 17;
 +
  wdFormatOpenDocumentText = 23;
 +
var
 +
  FileFormat: OleVariant;    // Wichtig: das muss als OleVariant deklariert sein!
 +
begin
 +
  FileFormat := wdFormatRTF;
 +
  ADocument.SaveAs(FileName, FileFormat);
 +
  ...
 +
</syntaxhighlight>
  
==Worddokument schliessen==
+
==Worddokument schliessen und Speicher freigeben==
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
   varDokument.Close;                 // Schliesst das Worddokument
+
   varDokument.Close;         // Schliesst das Worddokument
 +
  varDokument := Unassigned; // Gibt den Speicher für die Programmsteuerung frei
 
   ...
 
   ...
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
==Worddokument Speicher freigeben==
+
==Worddokument Eigenschaften festlegen==
<syntaxhighlight>
+
Alle Eigenschaften des Worddokumentes können über ihren englischen Namen angesprochen werden.<br>
 +
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
   varDokument := Unassigned; // Gibt den Speicher für die Programmsteuerung frei
+
   varDokument.BuiltInDocumentProperties['Title'].Value := 'Testdokument';                 // fügt den Dokumententitel ein
 +
  varDokument.BuiltInDocumentProperties['Subject'].Value := 'Testdokumente';              // fügt das Thema ein
 +
  varDokument.BuiltInDocumentProperties['Author'].Value := 'Testuser';                    // fügt den Ersteller ein
 +
  varDokument.BuiltInDocumentProperties['Manager'].Value := 'Testmanager';                // fügt den verantwortlichen Manager ein
 +
  varDokument.BuiltInDocumentProperties['Company'].Value := 'Testfirma';                  // fügt die Firma ein
 +
  varDokument.BuiltInDocumentProperties['Category'].Value := 'Automatisationsbeispiele';  // fügt die Kategorie ein
 +
  varDokument.BuiltInDocumentProperties['Comments'].Value := 'Erstes Muster';            // fügt einen Kommentar ein
 
   ...
 
   ...
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
<br>
 
==Absatz==
 
==Absatz==
 
<br>
 
<br>
 
===Absatz ausrichten===
 
===Absatz ausrichten===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 239: Line 273:
 
<br>
 
<br>
 
===Absatz (Zeilenumbruch) einfügen===
 
===Absatz (Zeilenumbruch) einfügen===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 246: Line 280:
 
   varWdApp.Selection.InsertAfter(String(#13));  // fügt einen Zeilenumbruch im Worddokument ein
 
   varWdApp.Selection.InsertAfter(String(#13));  // fügt einen Zeilenumbruch im Worddokument ein
 
   varWdApp.Selection.InsertAfter(String(#10));  // fügt einen Zeilenumbruch im Worddokument ein
 
   varWdApp.Selection.InsertAfter(String(#10));  // fügt einen Zeilenumbruch im Worddokument ein
 +
  ...
 +
end;
 +
</syntaxhighlight>
 +
<br>
 +
==Text formatieren==
 +
Der Text wird an der Cursorposition formatiert.
 +
<syntaxhighlight lang=pascal>
 +
begin
 +
  ...
 +
  varWdApp.Selection.Font.Name  := 'Times New Roman'; // Schriftart
 +
  varWdApp.Selection.Font.Size  := 12;                // Schriftgrösse
 +
  varWdApp.Selection.Font.Bold  := True;              // Fettschrift
 +
  varWdApp.Selection.Font.Italic := True;              // Kursivschrift
 +
 +
  varWdApp.Selection.Font.Name  := 'Arial';          // Schriftart
 +
  varWdApp.Selection.Font.Size  := 11;                // Schriftgrösse
 +
  varWdApp.Selection.Font.Bold  := False;            // keine Fettschrift
 +
  varWdApp.Selection.Font.Italic := False;            // keine Kursivschrift
 
   ...
 
   ...
 
end;
 
end;
Line 253: Line 305:
 
<br>
 
<br>
 
===Speicher für die Bookmarksteuerung reservieren===
 
===Speicher für die Bookmarksteuerung reservieren===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
var
 
var
 
   varBookmark: oleVariant;  // Reserviert Speicher für die Steuerung der Bookmark
 
   varBookmark: oleVariant;  // Reserviert Speicher für die Steuerung der Bookmark
Line 259: Line 311:
 
<br>
 
<br>
 
===Variable initialisieren===
 
===Variable initialisieren===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 272: Line 324:
 
<br>
 
<br>
 
===An die Anfangsposition der Bookmark schreiben===
 
===An die Anfangsposition der Bookmark schreiben===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 282: Line 334:
 
<br>
 
<br>
 
===Bookmark löschen===
 
===Bookmark löschen===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 292: Line 344:
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
<br>
 
===Variable für Bookmarksteuerung freigeben===
 
===Variable für Bookmarksteuerung freigeben===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 301: Line 354:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
 +
===Prüfen, ob eine bestimmte Bookmark vorhanden ist===
 +
<syntaxhighlight lang=pascal>
 +
begin
 +
  ...
 +
  if varDokument.Bookmarks.Exists('Text1') then ... ;  //Prüft, ob eine Bookmark vorhanden ist
 +
  ...
 +
end;
 +
</syntaxhighlight>
 +
<br>
 +
===Bookmarks zählen===
 +
<syntaxhighlight lang=pascal>
 +
var
 +
  intAnz: Integer;
 +
begin
 +
  ...
 +
  intAnz := varDokument.Bookmarks.Count;
 +
  ...
 +
end;
 +
</syntaxhighlight>
 +
<br>
 +
==Formularfelder==
 +
<br>
 +
===In ein Formularfeld schreiben===
 +
<syntaxhighlight lang=pascal>
 +
begin
 +
  ...
 +
  varWdApp.ActiveDocument.FormFields.Item('Text1').Result := 'Versuch'; // schreibt in ein Formularfeld
 +
  varWdApp.ActiveDocument.FormFields.Item('Text1').Result := ''; // leert ein Formularfeld
 +
  ...
 +
</syntaxhighlight>
 +
<br>
 +
===Ein Formularfeld auslesen===
 +
<syntaxhighlight lang=pascal>
 +
var
 +
  strText: String;
 +
begin
 +
  ...
 +
  strText := varWdApp.ActiveDocument.FormFields.Item('Text2').Result; // liest ein Formularfeld aus
 +
  ...
 +
end;
 +
</syntaxhighlight>
 
==Tabellen==
 
==Tabellen==
 
<br>
 
<br>
 
===Speicher für die Tabellensteuerung reservieren===
 
===Speicher für die Tabellensteuerung reservieren===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
var
 
var
 
   varTabelle: oleVariant;
 
   varTabelle: oleVariant;
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
===Variable initialisieren und Tabelle anlegen===
+
===Arbeiten mit neuen Tabellen===
<syntaxhighlight>
+
<br>
 +
====Variable initialisieren und Tabelle anlegen====
 +
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 318: Line 414:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
===Die neu angelegte Tabelle füllen===
+
====Die neu angelegte Tabelle füllen====
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 329: Line 425:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
===Variable wieder freigeben===
+
===Arbeiten mit vorhandenen Tabellen===
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 +
var
 +
  intAnz: Integer;
 +
begin
 +
  ...
 +
  varDokument.Tables.Item(1).Cell(2, 2).Range.Text:='Hallo'; // fügt in einen Wert in eine Zelle ein
 +
  varDokument.Tables.Item(1).Rows.Add();  // fügt am Ende der Tabelle eine Zeile an
 +
  intAnz:=varDokument.Tables.Item(1).Rows.Count;  // ermittelt die Anzahl der Zeilen
 +
  ...
 +
end;
 +
</syntaxhighlight>
 +
<br>
 +
===Tabellenvariable wieder freigeben===
 +
<syntaxhighlight lang=pascal>
 
begin
 
begin
 
   ...
 
   ...
Line 338: Line 447:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br>
 
<br>
 
 
=Auszug aus den Wordkonstanten=
 
=Auszug aus den Wordkonstanten=
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
unit uWdConst;
 
unit uWdConst;
  
Line 392: Line 500:
 
wdOpenFormatWebPages = 7;
 
wdOpenFormatWebPages = 7;
 
wdOpenFormatXML = 8;
 
wdOpenFormatXML = 8;
 +
 +
// Klasse WdSaveOptions
 +
wdDoNotSaveChanges = 0;
 +
wdPromptToSaveChanges = -2;
 +
wdSaveChanges = -1;
 +
 +
// Klasse WdCountry
 +
wdArgentina = 54;
 +
wdBrazil = 55;
 +
wdCanada = 2;
 +
wdChile = 56;
 +
wdChina = 86;
 +
wdDenmark = 45;
 +
wdFinland = 358;
 +
wdFrance = 33;
 +
wdGermany = 49;
 +
wdIceland = 345;
 +
wdItaly = 39;
 +
wdJapan = 81;
 +
wdKorea = 82;
 +
wdLatinAmerica = 3;
 +
wdMexico = 52;
 +
wdNetherlands = 31;
 +
wdNorway = 47;
 +
wdPeru = 51;
 +
wdSpain = 34;
 +
wdSweden = 46;
 +
wdTaiwan = 886;
 +
wdUK = 44;
 +
wdUS = 1;
 +
wdVenezuela = 58;
 +
 +
// Klasse WdUnits
 +
wdCell = 12;
 +
wdCharacter = 1;
 +
wdCharacterFormatting = 13;
 +
wdColumn = 9;
 +
wdItem = 16;
 +
wdLine = 5;
 +
wdParagraph = 4;
 +
wdParagraphFormatting = 14;
 +
wdRow = 10;
 +
wdScreen = 7;
 +
wdSection = 8;
 +
wdSentence = 3;
 +
wdStory = 6;
 +
wdTable = 15;
 +
wdWindow = 11;
 +
wdWord = 2;
  
 
implementation
 
implementation
Line 397: Line 554:
 
end.
 
end.
 
</syntaxhighlight>
 
</syntaxhighlight>
<br>
 
<br>
 
--[[User:Olaf|Olaf]] 16:52, 25 September 2012 (UTC)
 
[[Category:Tutorials/de]]
 

Latest revision as of 23:56, 11 September 2022

Windows logo - 2012.svg

Dieser Artikel behandelt ausschließlich Windows.

Siehe auch: Multiplatform Programming Guide/de

Deutsch (de)

Zurück zur Office Automation.


Word als OleObjekt

Word lässt sich wie alle MS Office Produkte automatisieren. Im Gegensatz zu den übrigen MS Office Produkten ist es bei der Automatisierung sehr sehr langsam und reagiert sehr ungewohnt.
Wenn man als Automatisierungsobjekt nicht zwingend auf MS Word angewiesen ist, dann sollte man für die Automatisierung MS Excel nehmen.
Wenn Sie Umlaute usw. verwenden, dann sollten Sie wissen, dass Word UTF16 codierte Strings verwendet.
Für die Oleautomation muss die Unit ComObj eingebunden werden.
Wenn Sie mit Umlauten usw. arbeiten dann brauchen Sie für das Stringcasting die Unit lclproc.

Beispiel:

unit
  ComObj, lclproc;



Speicherplatz für Word und Worddokument reservieren

var
  varWdApp: oleVariant;      // Reserviert Speicher für die Programmsteuerung
  varDokument: oleVariant;   // Reserviert Speicher für die Steuerung des Worddokuments


Wordsteuerung

Word OleObjekt erstellen

begin
  ...
  try
    varWdApp := CreateOleObject('Word.Application'); // erstellt das Wordobjekt
  except
    WriteLn('MS Word kann nicht gestartet werden.'); // Fehlerbehandlung
  end;
  ...
end;


Word Version ermitteln

begin
  ...
  ShowMessage(varWdApp.Version);
  ...
end;


Word beenden und Speicher freigeben

begin
  ...
  varWdApp.Quit;
  varWdApp := Unassigned;
  ...
end;


Die Sichtbarkeit von Word steuern

Eine unsichtbare Anwendung verhindert während der Automatisierung das Flackern des Bildschirms.

begin
  ...
  varWdApp.Visible := False;  // macht Word unsichtbar
  varWdApp.Visible := True;   // macht Word sichtbar
  ...
end;


Word Screenupdating (Bildschirmaktualisierung)

begin
  ...
  varWdApp.ScreenUpdating := False; // schaltet bei einem sichtbaren Word das Flackern des Bildschirms aus
                                    // und erhöht die Verarbeitungsgeschwindigkeit.
  varWdApp.ScreenUpdating := True;  // schaltet die Bildschirmaktualisierung wieder ein.
  ...
end;


Sprache der Wordinstallation ermittlen

begin
  ...
  if varWdApp.System.Country <> wdGermany then ...  // prüft, ob die Wordinstallation nicht Deutsch ist.
  ...
end;


Text des Dokuments bearbeiten

Neues Worddokument erstellen

begin
  ...
  varDokument := varWdApp.Documents.Add; // fügt ein neues 'leeres' Worddokument hinzu
  ...
end;


Vorhandenes Worddokument öffnen

Es gibt mehrere Möglichkeiten ein Worddokument zu öffnen.

Beispiel 1:
Ein Worddokument mit mehreren Parametern öffnen
Alle Parameter außer Parameter 1 sind optional

  1. Parameter: Pfadname und Datename
  2. Parameter: False, wenn die Datei nicht in das aktuelle Wordformat konvertiert werden soll
  3. Parameter: True, wenn die Datei schreibgeschützt geöffnet werden soll
  4. Parameter: True, wenn der Name der Datei der Liste der zuletzt geöffneten Dateien hizugefügt werden soll
  5. Parameter: Das Kennwort (Passwort) zum öffnen der Vorlage
  6. Parameter:
  7. Parameter: Das Kennwort (Passwort) zum Speichern des Dokuments
  8. Parameter: Das Kennwort (Passwort) zum Speichern der Vorlage
  9. Parameter:
  10. Parameter: Das Dateikonvertierungsprogramm, das zum Öffnen des Dokuments verwendet werden soll. Der Standardwert ist wdOpenFormatAuto
begin
  ...
  varDokument :=  varWdApp.Documents.Open(FileName, EmptyParam, EmptyParam,
                      EmptyParam, EmptyParam, EmptyParam,
                      EmptyParam, EmptyParam, EmptyParam,
                      EmptyParam);
  ...
end;


Beispiel 2:
Ein Worddokument mit einem Umlaut usw. im Dateinamen öffnen

begin
  ...
  varDokument := varWdApp.Documents.Open(UTF8ToUTF16('D:\Üben.doc')); // Öffnet ein Worddokument mit Umlauten usw. im Namen
  ...
end;


Beispiel 3:

begin
  ...
  varDokument := varWdApp.Documents.Open(strPfad);        // öffnet ein Worddokument mit Hilfe einer Variablen
                                                          // (Pfad: maximal 255 Zeichen, Alphanumerisch)
  varDokument := varWdApp.Documents.Open('D:\Test.doc');  // öffnet ein Worddokument mit festem Pfad hinzu
  ...
end;


Worddokument aktivieren

begin
  ...
  varDokument.Activate;  //aktiviert das Worddokument
  ...
end;


Text Cursor setzen

begin
  ...
  varWdApp.Selection.EndKey(wdStory);       // Cursor bewegt sich zum Ende des Dokumentes
  varWdApp.Selection.HomeKey(wdStory);      // Cursor bewegt sich zum Anfang des Dokumentes
  varWdApp.Selection.MoveRight(wdWord);     // Cursor am Anfang des nächsten Wortes
  varWdApp.Selection.MoveLeft(wdCharacter); // Cursor wird um ein Zeichen nach Links versetzt
  varWdApp.Selection.Delete(wdCharacter);   // Löscht ein Zeichen rechts vom Cursor
  varWdApp.Selection.MoveDown(wdParagraph); // Cursor bewegt sich zum Anfang des nächsten Abschnitts
  ...
end;


Text in ein Worddokument einfügen

begin
  ...
  varWdApp.Selection.TypeText(UTF8Decode('Neuer Text'));
  varWdApp.Selection.TypeText(UTF8Decode('Zusätzlicher Text')); // Benötigt die Unit lclproc für die korrekte
                                                                // Umwandlung der Umlaute

  varWdApp.Selection.InsertAfter('Test');       // fügt im Worddokument nach der Cursorposition diesen Text ein
                                                // die Cursorpsition befindet sich bei einem frisch geöffneten Worddokument
                                                // immer am Anfang des Dokuments

  ...
end;


Worddokument speichern

Beispiel 1:
Ein Worddokument ohne Besonderheiten im Namen speichern.

begin
  ...
  varDokument.SaveAs('D:\Test.doc'); // Speichert das Worddokument unter einem neuen Namen
  varDokument.Save;                  // Speichert das Worddokument unter seinem aktuellen Namen
  ...
end;


Beispiel 2:
Ein Worddokment mit Umlaut im Namen speichern.

begin
  ...
  varDokument.SaveAs(UTF8ToUTF16('D:\Üben.doc')); // Speichert das Worddokument (mit Umlauten usw. im Namen)
                                                  // unter einem neuen Namen ab
  ...
end;


Beispiel 3:
Ein Worddokument in einem anderen Datei-Format speichern.

const
  // Möglichkeiten wären u.a.
  // https://docs.microsoft.com/de-de/office/vba/api/word.wdsaveformat
  wdFormatDocument97 = 0;  // .doc format
  wdFormatRTF = 6;
  wdFormatHTML = 8;
  wdFormatXML = 11;
  wdFormatDocumentDefault = 16;  // .docx format
  wdFormatPDF = 17;
  wdFormatOpenDocumentText = 23;
var
  FileFormat: OleVariant;    // Wichtig: das muss als OleVariant deklariert sein!
begin
  FileFormat := wdFormatRTF;
  ADocument.SaveAs(FileName, FileFormat);
  ...

Worddokument schliessen und Speicher freigeben

begin
  ...
  varDokument.Close;         // Schliesst das Worddokument
  varDokument := Unassigned; // Gibt den Speicher für die Programmsteuerung frei
  ...
end;


Worddokument Eigenschaften festlegen

Alle Eigenschaften des Worddokumentes können über ihren englischen Namen angesprochen werden.

begin
  ...
  varDokument.BuiltInDocumentProperties['Title'].Value := 'Testdokument';                 // fügt den Dokumententitel ein
  varDokument.BuiltInDocumentProperties['Subject'].Value := 'Testdokumente';              // fügt das Thema ein
  varDokument.BuiltInDocumentProperties['Author'].Value := 'Testuser';                    // fügt den Ersteller ein
  varDokument.BuiltInDocumentProperties['Manager'].Value := 'Testmanager';                // fügt den verantwortlichen Manager ein
  varDokument.BuiltInDocumentProperties['Company'].Value := 'Testfirma';                  // fügt die Firma ein
  varDokument.BuiltInDocumentProperties['Category'].Value := 'Automatisationsbeispiele';  // fügt die Kategorie ein
  varDokument.BuiltInDocumentProperties['Comments'].Value := 'Erstes Muster';             // fügt einen Kommentar ein
  ...
end;


Absatz


Absatz ausrichten

begin
  ...
  varWdApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphright;  // Ausrichtung am rechten Dokumentrand
  varWdApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphLeft;   // Ausrichtung am linken Dokumentrand
  varWdApp.Selection.ParagraphFormat.Alignment := wdAlignParagraphCenter; // Ausrichtung in der Dokumentmitte
  ...
end;


Absatz (Zeilenumbruch) einfügen

begin
  ...
  varWdApp.Selection.TypeParagraph; // fügt einen Zeilenumbruch (Absatz) ein
  // Alternative
  varWdApp.Selection.InsertAfter(String(#13));  // fügt einen Zeilenumbruch im Worddokument ein
  varWdApp.Selection.InsertAfter(String(#10));  // fügt einen Zeilenumbruch im Worddokument ein
  ...
end;


Text formatieren

Der Text wird an der Cursorposition formatiert.

begin
  ...
  varWdApp.Selection.Font.Name   := 'Times New Roman'; // Schriftart
  varWdApp.Selection.Font.Size   := 12;                // Schriftgrösse
  varWdApp.Selection.Font.Bold   := True;              // Fettschrift
  varWdApp.Selection.Font.Italic := True;              // Kursivschrift

  varWdApp.Selection.Font.Name   := 'Arial';           // Schriftart
  varWdApp.Selection.Font.Size   := 11;                // Schriftgrösse
  varWdApp.Selection.Font.Bold   := False;             // keine Fettschrift
  varWdApp.Selection.Font.Italic := False;             // keine Kursivschrift
  ...
end;


Bookmarks


Speicher für die Bookmarksteuerung reservieren

var
  varBookmark: oleVariant;   // Reserviert Speicher für die Steuerung der Bookmark


Variable initialisieren

begin
  ...
  // Fügt an der Stelle einer Bookmark (Textmarke / Markierung) einen Text ein
  varBookmark := varDokument.Bookmarks.Item(2);  // Auswahl der zu ersetzenden Bookmark (Markierung) über den Index
                                                 // in diesem Fall ist es die erste Bookmark
  // Alternative
  varBookmark := varDokument.Bookmarks.Item('Test2');  // Auswahl der zu ersetzenden Bookmark (Markierung) über ihren Namen
  ...
end;


An die Anfangsposition der Bookmark schreiben

begin
  ...
  varBookmark.Range.Text := UTF8ToUTF16('Testeintrag für die Bookmark'); // damit wird an der Position der
                                                                         // Bookmark der Text eingefügt.
  ...
end;


Bookmark löschen

begin
  ...
  // Löscht, die ausgewählte Bookmark und nicht den eingefügten Text
  varDokument.Bookmarks.Item(1).Delete;       // Löscht die Bookmark über einen Index
  // Alternative
  varDokument.Bookmarks.Item('Test1').Delete; // Löscht die Bookmark über ihren Namen
  ...
end;


Variable für Bookmarksteuerung freigeben

begin
  ...
  varBookmark := Unassigned;
  ...
end;


Prüfen, ob eine bestimmte Bookmark vorhanden ist

begin
  ...
  if varDokument.Bookmarks.Exists('Text1') then ... ;  //Prüft, ob eine Bookmark vorhanden ist
  ...
end;


Bookmarks zählen

var
  intAnz: Integer;
begin
  ...
  intAnz := varDokument.Bookmarks.Count;
  ...
end;


Formularfelder


In ein Formularfeld schreiben

begin
  ...
  varWdApp.ActiveDocument.FormFields.Item('Text1').Result := 'Versuch'; // schreibt in ein Formularfeld
  varWdApp.ActiveDocument.FormFields.Item('Text1').Result := ''; // leert ein Formularfeld
  ...


Ein Formularfeld auslesen

var
  strText: String;
begin
  ...
  strText := varWdApp.ActiveDocument.FormFields.Item('Text2').Result; // liest ein Formularfeld aus
  ...
end;

Tabellen


Speicher für die Tabellensteuerung reservieren

var
  varTabelle: oleVariant;


Arbeiten mit neuen Tabellen


Variable initialisieren und Tabelle anlegen

begin
  ...
  varTabelle := varDokument.Tables.Add(varWdApp.Selection.Range, 5, 3);
  ...
end;


Die neu angelegte Tabelle füllen

begin
  ...
  varTabelle.Cell(1, 1).Range.Text := 'Januar';
  varTabelle.Cell(1, 2).Range.Text := 'Februar';
  varTabelle.Cell(1, 3).Range.Text := UTF8ToUTF16('März');
  ...
end;


Arbeiten mit vorhandenen Tabellen

var
  intAnz: Integer;
begin
  ...
  varDokument.Tables.Item(1).Cell(2, 2).Range.Text:='Hallo'; // fügt in einen Wert in eine Zelle ein
  varDokument.Tables.Item(1).Rows.Add();  // fügt am Ende der Tabelle eine Zeile an
  intAnz:=varDokument.Tables.Item(1).Rows.Count;  // ermittelt die Anzahl der Zeilen
  ...
end;


Tabellenvariable wieder freigeben

begin
  ...
  varTabelle := Unassigned;
  ...
end;


Auszug aus den Wordkonstanten

unit uWdConst;

interface

const
// Klasse WdGoToItem
wdGoToBookmark = -1;
wdGoToComment = 6;
wdGoToEndnote = 5;
wdGoToEquation = 10;
wdGoToField = 7;
wdGoToFootnote = 4;
wdGoToGrammaticalError = 14;
wdGoToGraphic = 8;
wdGoToHeading = 11;
wdGoToLine = 3;
wdGoToObject = 9;
wdGoToPage = 1;
wdGoToPercent = 12;
wdGoToProofreadingError = 15;
wdGoToSection = 0;
wdGoToSpellingError = 13;
wdGoToTable = 2;

// Klasse wdParagraphAlignment
wdAlignParagraphCenter = 1;
wdAlignParagraphDistribute = 4;
wdAlignParagraphJustify = 3;
wdAlignParagraphJustifyHi = 7;
wdAlignParagraphJustifyLow = 8;
wdAlignParagraphJustifyMed = 5;
wdAlignParagraphLeft = 0;
wdAlignParagraphRight = 2;
wdAlignParagraphThaiJustify = 9;

//Klasse wdRowAlignment
wdAlignRowCenter = 1;
wdAlignRowLeft = 0;
wdAlignRowRight = 2;

// Klasse wdOpenFormat
wdOpenFormatAllWord = 6;
wdOpenFormatAuto = 0;
wdOpenFormatDocument = 1;
wdOpenFormatEncodedText = 5;
wdOpenFormatRTF = 3;
wdOpenFormatTemplate = 2;
wdOpenFormatText = 4;
wdOpenFormatUnicodeText = 5;
wdOpenFormatWebPages = 7;
wdOpenFormatXML = 8;

// Klasse WdSaveOptions
wdDoNotSaveChanges = 0;
wdPromptToSaveChanges = -2;
wdSaveChanges = -1;

// Klasse WdCountry
wdArgentina = 54;
wdBrazil = 55;
wdCanada = 2;
wdChile = 56;
wdChina = 86;
wdDenmark = 45;
wdFinland = 358;
wdFrance = 33;
wdGermany = 49;
wdIceland = 345;
wdItaly = 39;
wdJapan = 81;
wdKorea = 82;
wdLatinAmerica = 3;
wdMexico = 52;
wdNetherlands = 31;
wdNorway = 47;
wdPeru = 51;
wdSpain = 34;
wdSweden = 46;
wdTaiwan = 886;
wdUK = 44;
wdUS = 1;
wdVenezuela = 58;

// Klasse WdUnits
wdCell = 12;
wdCharacter = 1;
wdCharacterFormatting = 13;
wdColumn = 9;
wdItem = 16;
wdLine = 5;
wdParagraph = 4;
wdParagraphFormatting = 14;
wdRow = 10;
wdScreen = 7;
wdSection = 8;
wdSentence = 3;
wdStory = 6;
wdTable = 15;
wdWindow = 11;
wdWord = 2;

implementation

end.