WordAutomation/de

From Lazarus wiki
Revision as of 20:41, 26 September 2012 by Olaf (talk | contribs) (Text des Dokuments bearbeiten)
Windows logo - 2012.svg

Dieser Artikel behandelt ausschließlich Windows.

Siehe auch: Multiplatform Programming Guide/de

Deutsch (de)


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;


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;


Text des Dokuments bearbeiten

Worddokument erstellen

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


Worddokument öffnen

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

Beispiel 1:
Ein Worddokument mit mehreren Parametern öffnen
Alle Parameter ausser 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;


Worddokument Text einfügen

begin
  ...
  varWdApp.Selection.TypeText(Text := 'Neuer Text. ');
  varWdApp.Selection.TypeText(Text := UTF8ToUTF16('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;


Worddokument schliessen

begin
  ...
  varDokument.Close;                 // Schliesst das Worddokument
  ...
end;


Worddokument Speicher freigeben

begin
  ...
  varDokument := Unassigned; // Gibt den Speicher für die Programmsteuerung frei
  ...
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

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;


Tabellen


Speicher für die Tabellensteuerung reservieren

var
  varTabelle: oleVariant;


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;


Variable 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;

implementation

end.



--Olaf 16:52, 25 September 2012 (UTC)