![]() |
OLE - Word - Text ersetzen - in Tabellen
Hallo liebe Entwicklergemeinde.
Bei der Bearbeitung eines Word-Dokuments über die OLE-Schnittstelle ist mir ein seltsames Phänomen aufgefallen. Wenn über die OLE-Schnittstelle Text im Worddokument durch Text mit Zeilenumbrüchen ersetzt wird, erscheinen an Stelle der Zeilenumbrüche nicht darstellbare Zeichen in Form von Rechtecken. Dieses seltsame Verhalten beschränkt sich auf ersetzte Texte innerhalb von Tabellen. Außerhalb von Tabellen werden die Zeilenumbrüche angezeigt. Kann jemand dieses Verhalten erklären? Im Folgenden findet ihr ein Beispiel. Ich verwende:
Hier ein kleines Beispiel
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, comObj; type TForm1 = class(TForm) procedure FormShow(Sender: TObject); private public end; var Form1: TForm1; implementation {$R *.DFM} procedure wordformular; const wdFindContinue = 1; wdReplaceOne = 1; wdReplaceAll = 2; var Word: Variant; doc: OleVariant; WordTabelle: OleVariant; begin screen.Cursor := crHourglass; try // Läuft Word noch nicht, wird eine neue Verbindung aufgebaut Word := CreateOleObject('Word.Application'); except // Schlägt sie fehl (Word nicht installiert), gibt es eine Fehlermeldung ShowMessage('Microsoft Word kann nicht starten.'); screen.cursor := crDefault; exit; end; Word.Documents.Add; word.visible := true; //Übergabe des aktiven Dokuments in die Variable doc doc := word.ActiveDocument; //Tabelle erzeugen mit 5 Zeilen und 5 Spalten WordTabelle := doc.Tables.Add(Word.selection.range, 5, 5, emptyParam,emptyParam) ; //!!!!!!!!!!!Der Index einer Tabelle in Word beginnt immer mit 1, //nicht mit 0 wie in Delphi!!!!!!!!!!!!!!!!!!!!!!! //Schriftgröße in der 2. Zeile und 2. Spalte auf 14 setzen WordTabelle.cell(2,2).range.font.size := 14; //Schriftgrad in der 2. Zeile und 2.Spalte aud Fett setzen WordTabelle.cell(2,2).range.font.bold := true; //Textübergabe in die 2. Zeile und 2. Spalte WordTabelle.cell(2,2).range.text := 'Hallo Welt'; word.Selection.Find.ClearFormatting; word.Selection.Find.Text := 'Hallo Welt'; word.Selection.Find.Replacement.Text := 'ich'+#$D+'bin'+#$D+'da'; word.Selection.Find.Forward := True; word.Selection.Find.Wrap := wdFindContinue; word.Selection.Find.Format := False; word.Selection.Find.MatchCase := False; word.Selection.Find.MatchWholeWord := False; word.Selection.Find.MatchWildcards := False; word.Selection.Find.MatchSoundsLike := False; word.Selection.Find.MatchAllWordForms := False; // Hier kann ein Haltepunkt gesetzt werden um im geöffneten Word-Dokument ein zusätzliches // Hallo Welt, außerhalb der Tabelle einzufügen word.Selection.Find.Execute(Replace := wdReplaceAll); word.Application.Quit; end; procedure TForm1.FormShow(Sender: TObject); begin wordformular(); end; end. |
AW: OLE - Word - Text ersetzen
Probier mal als Zeilenumbruch
$0A bzw. $0D$0A |
AW: OLE - Word - Text ersetzen
Danke für deine Antwort Bernhard.
Erst morgen kann ich deinen Tip ausprobieren und dann schreiben ob es funktioniert hat. Bis dann und noch einen schönen Abend. |
AW: OLE - Word - Text ersetzen
Guten Morgen,
nun der umgesetzte Tip hat nicht das gewünschte Ergebnis gebracht. Durch probieren habe ich herausgefunden das #11 für einen Zeilenumbruch in Tabellen sorgt. Mit freundlichen Grüßen, Painterxyz |
AW: OLE - Word - Text ersetzen - in Tabellen
Wie kann man die CRs (#13) möglichst schnell in den Tabellen ersetzen durch VTs (#11)?
|
AW: OLE - Word - Text ersetzen - in Tabellen
Auf hohe Geschwindigkeit wirst Du bei Deiner Implementierung nicht kommen können, da Du Variants verwendest. Die bremsen nämlich OLE enorm aus. Aber Grundsätzlich kannst du ja Word die Sache machen lassen mit diesem VBA-Schnipsel solltest du weiterkommen.
Delphi-Quellcode:
Sherlock
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting With Word.Selection.Find .Text = "huba" .Replacement.Text = "buba" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute Replace:=wdReplaceAll |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz