Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Word-OLE. geschütztes Dokument (https://www.delphipraxis.net/192874-word-ole-geschuetztes-dokument.html)

hoika 29. Mai 2017 16:13

Word-OLE. geschütztes Dokument
 
Hallo,

folgender Code-Ausschnitt zum Ersetzen von Text in MS-Word klappt seit Jahren.
Also bitte nicht fragen, was SL_Search und iString sind.

Delphi-Quellcode:
             
WordApp.ActiveWindow.ActivePane.Selection.WholeStory;


               WordApp.ActiveWindow.ActivePane.View.SeekView:= wdSeekMainDocument;
               WordApp.ActiveWindow.ActivePane.View.Type := wdPrintView;
               DBInText_OLE_ReplaceString(WordApp, SearchString, ReplaceString, 'Hauptdokument');
Delphi-Quellcode:
             
DBInText sieht etwa so aus
      WordApp.Selection.Find.ClearFormatting;
      WordApp.Selection.Find.Replacement.ClearFormatting;
      WordApp.Selection.Find.Text:= SL_Search[iString];
      WordApp.Selection.Find.Replacement.Text := SL_Replace[iString];
      WordApp.Selection.Find.Forward := True;
      WordApp.Selection.Find.Wrap := wdFindContinue;
      WordApp.Selection.Find.Format := False;
      WordApp.Selection.Find.MatchCase := False;
      WordApp.Selection.Find.MatchWholeWord := False;
      WordApp.Selection.Find.MatchWildcards := False;
      WordApp.Selection.Find.MatchSoundsLike := False;
      WordApp.Selection.Find.MatchAllWordForms := False;

      //WordApp.Selection.Find.Execute(Replace:= wdReplaceAll);
      if not WordApp.Selection.Find.Execute(Replace:= wdReplaceAll) then
      begin
        //iDummy := 1;
      end;
Problem:
Ich habe ein teilweise geschütztes Dokument.
Dann schlägt die folgende Zeile mit
WordApp.ActiveWindow.ActivePane.Selection.WholeSto ry;
fehl.

Fehlermeldung
Diese Methode oder Eigenschaft ist nicht verfügbar, weil das Dokument geschützt ist

Was anderes als WholeStory soll ich denn dann nehmen?


Wichtig noch als Info:
Das Dokument ist nicht schreibgeschützt.
Ich kann es mit Word selbst bearbeiten, z.B. auch eigene Text-Kenner anlegen.

Bernhard Geyer 29. Mai 2017 16:40

AW: Word-OLE. geschütztes Dokument
 
Zitat:

Zitat von hoika (Beitrag 1372905)
Fehlermeldung
Diese Methode oder Eigenschaft ist nicht verfügbar, weil das Dokument geschützt ist

...

Das Dokument ist nicht schreibgeschützt.

Schreibschutz und geschütztes Dokument ist etwas anderes.
Hat das Dokument evtl. Formularfelder und wird bei OLE-Zugriff in Formularmodus geöffnet?

hoika 29. Mai 2017 18:33

AW: Word-OLE. geschütztes Dokument
 
Hallo,
der Unterschied ist schon klar ;)

Jetzt weiß ich, was mich die ganz Zeit gestört hat.
Ja, das Dokument hat Formularfelder, die ich nicht löschen kann.

Sollte man dann versuchen, die Feldnamen rauszufinden?
Wie würde denn das Ausfüllen über Formularfelder aussehen?

Sieht dann wohl so aus? (https://www.delphi-treff.de/tipps-tr...rd-ausfuellen/)
Delphi-Quellcode:
 try
    Word.ActiveDocument.FormFields.Item('Name').Result := 'Hans Müller';
    Word.ActiveDocument.FormFields.Item('Ort').Result := 'Berlin';
  finally
    word := unassigned;
    screen.cursor := crDefault;
  end;

bra 30. Mai 2017 09:04

AW: Word-OLE. geschütztes Dokument
 
Ist der Schutz ohne Kennwort oder weisst du das Kennwort? Wenn ja, kannst du einfach den Dokumentschutz aufheben und wieder setzen:

Delphi-Quellcode:
doc: Word2002_TLB._Document;

procedure ReProtect(protectType: TOleEnum; pwd: String = '');
var
  v1, v2, v3: OleVariant;
begin
  try
    if protectType <> wdNoProtection then begin
      v1 := protectType;
      v2 := true;
      v3 := pwd;
      doc.Protect(v1, v2, v3);
    end;
  except
  // Fehler bei passwortgeschützten Dokumenten unterdrücken
  end;
end;

function UnProtect(pwd: String = ''): TOleEnum;
var
  v1: OleVariant;
begin
  result := doc.ProtectionType;
  try
    if doc.ProtectionType <> wdNoProtection then begin
      v1 := pwd;
      doc.Unprotect(v1);
    end;
  except
  // Fehler bei passwortgeschützten Dokumenten unterdrücken
  end;
end;

hoika 30. Mai 2017 11:03

AW: Word-OLE. geschütztes Dokument
 
Hallo,
ich würde das ja auch in Word selber aufheben, klappt aber nicht.

hoika 30. Mai 2017 11:53

AW: Word-OLE. geschütztes Dokument
 
Halo,
also ProtectionType ist schon mal wdAllowOnlyFormFields.

Jumpy 30. Mai 2017 12:54

AW: Word-OLE. geschütztes Dokument
 
Manuell kannst du es in Word aber ändern?
Dann zeichne das doch einfach mal mit dem Makro-Editor auf und programmiere das dann in Delphi nach.

p80286 30. Mai 2017 12:59

AW: Word-OLE. geschütztes Dokument
 
Ich hab mir in der Vergangenheit immer so beholfen, daß ich das Doc als .RTF gespeichert habe und dann wieder zurück geholt habe.

Gruß
K-H

bra 30. Mai 2017 13:14

AW: Word-OLE. geschütztes Dokument
 
Zitat:

Zitat von p80286 (Beitrag 1372959)
Ich hab mir in der Vergangenheit immer so beholfen, daß ich das Doc als .RTF gespeichert habe und dann wieder zurück geholt habe.

Was aber eine schlechte Idee ist, wenn man Wert darauf legt, dass die Formatierung des Dokuments bestehen bleibt. Von sonstigen Dokument-Eigenschaften mal ganz abgesehen.

p80286 30. Mai 2017 16:53

AW: Word-OLE. geschütztes Dokument
 
Die Formatierung wurde immer beibehalten, und die sonstigen Eigenschaften waren ja der Grund für die Aktion.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 Uhr.
Seite 1 von 2  1 2      

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