Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   SaveAs bei Word-Automation speichert nicht? (https://www.delphipraxis.net/171006-saveas-bei-word-automation-speichert-nicht.html)

Angel4585 15. Okt 2012 10:31

SaveAs bei Word-Automation speichert nicht?
 
Guten Tag!

ich hab folgendes Problem:
Ich habe x RTF/Word-Dokumente in einem Ordner und möchte jedes davon öffnen und mit SaveAs wieder speichern.
Mein Code sieht folgendemaßen aus:

Delphi-Quellcode:
procedure OpenSaveDocs(AList : TStringList);
var
i : integer;
Word : Variant;
varFalse : OleVariant;
begin
// Word starten
  try
    Screen.Cursor := crHourglass;
    try
      Word := CreateOleObject('Word.Application');
      Word.NormalTemplate.Saved := true;
    finally
      Screen.Cursor := crDefault;
    end;
  except
    raise ECantStartWordException.Create('Word konnte nicht gestartet werden.');
  end;

  try
    for i := 0 to AList.Count - 1 do
      try
        varFalse := false;
        //Dokument öffnen und speichern
        Word.Documents.Open(AList[i],
          varFalse, varFalse,
          varFalse, EmptyParam,
          EmptyParam, EmptyParam,
          EmptyParam, EmptyParam,
          EmptyParam, EmptyParam,
          EmptyParam, varFalse);
        Word.ActiveDocument.SaveAs(
          AList[i]     , 6,
          EmptyParam, EmptyParam,
          varFalse , EmptyParam,
          EmptyParam, EmptyParam,
          EmptyParam, EmptyParam,
          EmptyParam, EmptyParam,
          EmptyParam, EmptyParam,
          EmptyParam, EmptyParam
        );
        Word.ActiveDocument.Close;
      except
        on e:exception do
          begin
          ShowMessage(e.Message);
          end;
      end;
  finally
    Word.Quit;
  end;
Es wird alles ausgeführt, Dokumente werden geöffent bzw die tempdateien dazu angelegt udn wieder entfernt. Aber das Änderungsdatum ändert sich nicht. Also gehe ich davon aus, dass die SaveAs Funktion nicht tut was sie soll.
Nein ich mache das nicht um das Datum zu ändern. Ich habe in der Registry das Flag '0' gesetzt, wodurch Bilder zusätzlich als Kopie/Metainformation abgespeichert werden und RTF Dokumente sehr groß werden.
nun möchte ich nicht 10.000 Dokumente von Hand durchlaufen und öffnen und speichern und schreibe deswegen diese kleine Funktion.

Leider weis ich nicht was genau ich hier falsch mache.
Kann mir jemand helfen und einen Tipp geben?


Edit: Das Problem besteht auch nur beim überspeichern der Dateien, wenn ich die Dateien unter einem anderen Namen speichere klappt das.
seltsam, dabei gibts doch kein overwrite-flag oder sowas...

p80286 15. Okt 2012 11:18

AW: SaveAs bei Word-Automation speichert nicht?
 
Sieht so aus als gälte auch hier "it's not a bug, it's a feature".
Zumindestens wenn man Word mit einem bestehenden Dokument aufruft, und ohne Änderung speichert (unter)wird das Datum nicht geändert.

versuch doch an das Ende ein Leerzeichen zu schreiben und dies im Anschluß wieder zu löschen, und dann speichern.

Gruß
K-H

Angel4585 15. Okt 2012 11:29

AW: SaveAs bei Word-Automation speichert nicht?
 
Nein, es wird garnicht gespeichert. Nicht nur das Datum nicht geändert.

Die Datei beinhaltet ein Bild und wurde vor setzen des Registry-Flags gespeichert, dadurch ist die 6MB groß.
Wenn nach setzen des Flags erneut gespeichert wird, ist sie nurnoch 2 MB groß.

Bei der Methode von oben hat die Datei danach immernoch 6 MB.
Speichere ich die Datei unter einem anderen Namen hat sie 2MB.

Ich werde es jetzt vorerst so lösen, dass ich die Datei unter nem anderen Namen speichere, da Original lösche und die Kopie umbenenne in dern Originalnamen.

RWarnecke 15. Okt 2012 12:06

AW: SaveAs bei Word-Automation speichert nicht?
 
Dateien in Word werden erst mit einem neuen Datum versehen, wenn eine Änderung in dem Dokument erfolgt ist. Gerade eben manuell getestet mit Word 2010.

p80286 15. Okt 2012 12:41

AW: SaveAs bei Word-Automation speichert nicht?
 
[OT]
Es geht doch nichts über intelligente Programme, die genau wissen was der Benutzer will, und genau das auch immer tun[/OT]

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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