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-ID: 205004

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

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

rubberman
rubberman 15.04.2013 aktualisiert um 20:14:52 Uhr
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
kristov
kristov 16.04.2013 um 09:34:07 Uhr
Goto Top
Hallo rubberman,

funktioniert auf Anhieb! Vielen Dank!

kristov
kristov
kristov 16.04.2013 um 11:16:39 Uhr
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...
rubberman
rubberman 16.04.2013 um 18:24:33 Uhr
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
kristov
kristov 18.04.2013 um 13:43:20 Uhr
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!
yenz85
yenz85 16.08.2016 um 16:30:03 Uhr
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