kristov
Goto Top

Worddatei im Hintergrund öffnen, speichern und schließen.

Hallo,

ich suche nach einer Möglichkeit, Worddateien zu öffnen, zu speichern und zu schließen, das alles im Hintergrund und in allen Unterverzeichnissen. Hintergrund ist das hier genannte Problem.

Hat da jemand was parat?

kristov

Content-Key: 205004

Url: https://administrator.de/contentid/205004

Printed on: April 19, 2024 at 08:04 o'clock

Member: rubberman
rubberman Apr 15, 2013 updated at 18:14:52 (UTC)
Goto Top
Hallo kristov,

schmeiß das Script mal in den Ordner unter dem die Worddateien liegen und stelle sicher, dass keine der Dateien geöffnet ist.

*.vbs
Option Explicit

Dim oFSO, oWord, sErr
Set oFSO = CreateObject("Scripting.FileSystemObject")  
Set oWord = CreateObject("Word.Application")  
If Not IsObject(oWord) Then WScript.Quit
oWord.DisplayAlerts = 0
oWord.Visible = False
processDocs oFSO.GetParentFolderName(WScript.ScriptFullName)
oWord.Quit
Set oWord = Nothing
Set oFSO = Nothing
MsgBox "Fehlgeschlagene Dateien: " & vbNewLine & sErr, vbInformation Or vbSystemModal, "FERTIG"  


Sub processDocs(sFolder)
  Dim oFolder, oSubfolder, oFile, oDoc
  Set oFolder = oFSO.GetFolder(sFolder)
  For Each oSubFolder In oFolder.SubFolders
    processDocs oSubFolder.Path
  Next
  Set oSubfolder = Nothing
  For Each oFile In oFolder.Files
    If InStr(1, oFSO.GetExtensionName(oFile.Name), "doc", vbTextCompare) = 1 Then  
      On Error Resume Next
      Set oDoc = oWord.Documents.Open(oFile.Path)
      Err.Clear
      On Error Goto 0
      If IsObject(oDoc) Then
        oDoc.Save
        oDoc.Close
        Set oDoc = Nothing
      Else
        sErr = sErr & oFile.Path & vbNewLine
      End If
    End If
  Next
  Set oFile = Nothing
  Set oFolder = Nothing
End Sub
Das Script meldet sich, wenn es durch ist.

Grüße
rubberman
Member: kristov
kristov Apr 16, 2013 at 07:34:07 (UTC)
Goto Top
Hallo rubberman,

funktioniert auf Anhieb! Vielen Dank!

kristov
Member: kristov
kristov Apr 16, 2013 at 09:16:39 (UTC)
Goto Top
Hmm... eine Bitte noch:
Könnte man es so bewerkstelligen, das nicht alle Unterverzeichnisse durchsucht werden, sondern eine Textdatei mit den Pfaden als Inhalt (zB K:\v1\verzeichnis mit leerzeichen und Umlauten\2013\word.doc) als Basis hergenommen wird? Das wäre für mich doch praktikabler...
Member: rubberman
rubberman Apr 16, 2013 at 16:24:33 (UTC)
Goto Top
Hallo kristov,

ja, das ist auch nicht weiter kompliziert.
Option Explicit

Const sListFile = "list.txt"  

Dim oFSO, oListFile, oWord, oDoc, sDocPath, sErr
Set oFSO = CreateObject("Scripting.FileSystemObject")  
If Not oFSO.FileExists(sListFile) Then
  MsgBox "Liste nicht gefunden.", vbCritical Or vbSystemModal, "FEHLER"  
  WScript.Quit
End If
Set oListFile = oFSO.OpenTextFile(sListFile)
On Error Resume Next
Set oWord = CreateObject("Word.Application")  
Err.Clear
On Error Goto 0
If Not IsObject(oWord) Then
  MsgBox "MS Word konnte nicht geöffnet werden.", vbCritical Or vbSystemModal, "ERROR"  
  WScript.Quit
End If
oWord.DisplayAlerts = 0
oWord.Visible = False

While Not oListFile.AtEndOfStream
  sDocPath = Trim(oListFile.ReadLine)
  If sDocPath <> "" Then  
    If oFSO.FileExists(sDocPath) Then
      If InStr(1, oFSO.GetExtensionName(sDocPath), "doc", vbTextCompare) = 1 Then  
        On Error Resume Next
        Set oDoc = oWord.Documents.Open(sDocPath)
        Err.Clear
        On Error Goto 0
        If IsObject(oDoc) Then
          oDoc.Save
          oDoc.Close
          Set oDoc = Nothing
        Else
          sErr = sErr & sDocPath & vbNewLine
        End If
      Else
        sErr = sErr & sDocPath & vbNewLine
      End If
    Else
      sErr = sErr & sDocPath & vbNewLine
    End If
  End If
Wend
oWord.Quit
oListFile.Close
Set oListFile = Nothing
Set oWord = Nothing
Set oFSO = Nothing
MsgBox "Fehlgeschlagene Dateien: " & vbNewLine & sErr, vbInformation Or vbSystemModal, "FERTIG"  

sListFile musst du entsprechend anpassen. Aufpassen, dass immer absolute Pfade in der Liste stehen.

Grüße
rubberman
Member: kristov
kristov Apr 18, 2013 at 11:43:20 (UTC)
Goto Top
ja, das ist auch nicht weiter kompliziert.

Das liegt wohl im Auge des Betrachters face-wink

Nochmals vielen Dank, auch diese Deine Variante funktioniert auf Anhieb problemlos!
Member: yenz85
yenz85 Aug 16, 2016 at 14:30:03 (UTC)
Goto Top
Hi,

das Script hat mir schon weitergeholfen. Kann man auch eine Änderung in der Datei mit einbauen ? Es ist gaanz egal welche. Letztendlich geht es darum, das die Metafiles in der Datei nicht gespeichert werden (Reg hab ich angepasst und "manuell" funktioniert es auch). Dazu muss aber eine Änderung in der Datei erfolgen.

LG