Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.415 Beiträge
 
Delphi 7 Professional
 
#6

AW: Word-Datei einbinden, bearbeiten, speichern

  Alt 23. Jun 2021, 14:01
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  Try
    WordApp.Quit; // Word beenden.
  Except
    // Fehlermeldung ausgeben oder sonstwas machen oder Fehler ignorieren.
  end;
  Try
    WordApp := Unassigned;
  Except
    // Fehlermeldung ausgeben oder sonstwas machen oder Fehler ignorieren.
  end;
end;
SaveAs speichert das Dokument so, wie es gerade ist. Wenn man was ändert, speichert man die Änderungen natürlich mit. Das Originaldokument sollte aber ohne Änderungen geschlossen werden.

wdDoNotSaveChanges bzw. wdSaveChanges beziehen sich auf das WordApp.ActiveDocument.Close und werden diesem als Parameter übergeben. WordApp.ActiveDocument.SaveAs weiß davon nix.

WordApp.ActiveDocument.Close(wdSaveChanges) speichert Änderungen im aktiven Dokument und schließt es.
WordApp.ActiveDocument.Close(wdDoNotSaveChanges) verwirft Änderungen im aktiven Dokument und schließt es.
WordApp.ActiveDocument.SaveAs('Dokumentenname.docx ') speichert das aktive Dokument, so wie es gerade ist, unter dem angegebenen Namen.
Es wäre mal zu prüfen, ob sich durch SaveAs das aktive Dokument ändert (vermutlich ja).

Mal folgende Annahme:

Button1Click

Dann Änderungen machen

Button2Click

Dann sind die Änderungen im Dokument unter neuem Namen gespeichert.
Das per SaveAs gespeicherte Dokument entspricht damit nicht mehr dem mit Button1Click geöffneten Dokument.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  WordApp.Documents.Open('D:\Test1.docx');
  WordApp.ActiveDocument.SaveAs('D:\Test2.docx');
  // Hier sind die Dokumente Test1.docx und Test2.docx (noch) gleich.
end;

// Jetzt was im Dokument ändern.
procedure TForm1.Button2Click(Sender: TObject);
var
  vParam : OleVariant;
begin
  // Aktuelles Dokument (ohne Änderungen zu speichern) schließen.
  vParam := wdDoNotSaveChanges;
  WordApp.ActiveDocument.Close(vParam);
  // Damit dürften dann die Änderungen in der per SaveAs erstellten Kopie
  // nicht enthalten sein.
end;
  Mit Zitat antworten Zitat