AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OLE - Word - Text ersetzen - in Tabellen

Ein Thema von Painterxyz · begonnen am 5. Aug 2010 · letzter Beitrag vom 6. Aug 2010
Antwort Antwort
Painterxyz

Registriert seit: 25. Nov 2007
36 Beiträge
 
#1

OLE - Word - Text ersetzen - in Tabellen

  Alt 5. Aug 2010, 18:40
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:
  • Delphi 5 Enterprise
  • MS Office 2003

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.

Geändert von Painterxyz ( 6. Aug 2010 um 08:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: OLE - Word - Text ersetzen

  Alt 5. Aug 2010, 19:05
Probier mal als Zeilenumbruch

$0A bzw. $0D$0A
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Painterxyz

Registriert seit: 25. Nov 2007
36 Beiträge
 
#3

AW: OLE - Word - Text ersetzen

  Alt 5. Aug 2010, 21:07
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.
  Mit Zitat antworten Zitat
Painterxyz

Registriert seit: 25. Nov 2007
36 Beiträge
 
#4

AW: OLE - Word - Text ersetzen

  Alt 6. Aug 2010, 08:14
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
  Mit Zitat antworten Zitat
Painterxyz

Registriert seit: 25. Nov 2007
36 Beiträge
 
#5

AW: OLE - Word - Text ersetzen - in Tabellen

  Alt 6. Aug 2010, 10:14
Wie kann man die CRs (#13) möglichst schnell in den Tabellen ersetzen durch VTs (#11)?
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#6

AW: OLE - Word - Text ersetzen - in Tabellen

  Alt 6. Aug 2010, 11:08
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:
    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
Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann

Geändert von mkinzler ( 6. Aug 2010 um 11:08 Uhr) Grund: Code-Tags durch Delphi-tags ersetzt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz