Nicht angemeldet.
Hier können Sie Ihre eigenen Skripte und UDF's veröffentlichen undanderen zum Download anbieten oder von anderen herunterladen
#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_res_requestedExecutionLevel=highestAvailable #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.8.1 Author: Daniel Jacobs Script Function: löscht den Vorlagepfad (dieser verlangsamt oft den start in neuen Umgebungen) Speichert die Dokumente in der aktuellen Office Version erneut, um Kompatibilitätsprobleme bei älteren Dokumenten beheben (Beispielsweise, wenn die Dokumente aus einer Office 97 *.dot erstellt worden sind) #ce ---------------------------------------------------------------------------- Opt("TrayAutoPause", 0) Opt("TrayIconHide", 1) #include <Word.au3> #include <File.au3> #include <GUIConstantsEx.au3> #include <Timers.au3> Local $aDocFormate[4] = ["*.doc", "*.dot", "*.docx", "*.dotx"], $iAllFilecounter, $sProtokoll $hGui = GUICreate("Word Repair", 526, 120, 210, 114) $cPath = GUICtrlCreateInput(@ScriptDir, 8, 8, 505, 21) $cStartenAll = GUICtrlCreateButton("Vorlagenpfad entfernen und Word-Datei erneut abspeichern", 8, 40, 505, 25) $cStartenVorlage = GUICtrlCreateButton("Vorlagenpfad entfernen", 8, 70, 505, 25) GUISetState(@SW_SHOW, $hGui) _WordErrorHandlerRegister("MyErrFunc") _WordErrorNotify(True) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case -3 Exit Case $cStartenAll _OfficeFix(True) Case $cStartenVorlage _OfficeFix(False) EndSwitch WEnd _WordErrorHandlerDeRegister() _WordErrorNotify(False) Func _OfficeFix($bSave) $aDateien = "" $aPaths = "" $iAllFilecounter = 0 $iCurrentFile = 0 $endtimeopendoc = 0 $sPath = GUICtrlRead($cPath) If FileExists($sPath) Then If StringInStr(StringRight($sPath, 1), "\") = 0 Then $sPath &= "\" $starttime = _Timer_Init() GUISetState(@SW_HIDE, $hGui) GUICtrlSetState($cStartenAll, $GUI_DISABLE) GUICtrlSetState($cStartenVorlage, $GUI_DISABLE) ProgressOn("Worddateien in " & StringTrimRight($sPath, 1) & " werden repariert", $sPath, "Ordner werden durchsucht", Default, 0, 16) $aPaths = _ReFileListToString($sPath) ToolTip("") $sProtokoll = @ScriptDir & "\Protokoll_" & @MDAY & "." & @MON & "." & @YEAR & "_" & @HOUR & "-" & @MIN & "-" & @SEC & "-" & @MSEC & ".log" $aVersion = _Word_VersionInfo() FileWrite($sProtokoll, "Office Version: " & $aVersion[0] & $aVersion[1] & $aVersion[2] & @CRLF) $oWordApp = _WordCreate("", 0, 0) For $iPaths = 0 To UBound($aPaths) - 1 For $iFormat = 0 To UBound($aDocFormate) - 1 $aDateien = _FileListToArray($aPaths[$iPaths], $aDocFormate[$iFormat], 1) If UBound($aDateien) <> 0 Then FileWrite($sProtokoll, "-------------------------------------------------------" & @CRLF) FileWrite($sProtokoll, " " & @CRLF) FileWrite($sProtokoll, "Pfad: " & $aPaths[$iPaths] & @CRLF) FileWrite($sProtokoll, " " & @CRLF) FileWrite($sProtokoll, " " & @CRLF) For $i = 1 To $aDateien[0] If StringInStr(FileGetAttrib($aPaths[$iPaths] & $aDateien[$i]), "T") = 0 And StringLeft($aDateien[$i], 2) <> "~$" Then ;Temporäre Dateien werden ausgeschlossen FileSetAttrib($aPaths[$iPaths] & $aDateien[$i], "-R") ;Schreibschutz (falls vorhanden) wird entfernt) FileWrite($sProtokoll, "Dokument: " & @TAB & @TAB & $aDateien[$i] & @CRLF) $iCurrentFile += 1 ProgressSet($iCurrentFile * 100 / $iAllFilecounter, StringTrimLeft($aPaths[$iPaths], StringLen($sPath) - 1) & $aDateien[$i] & @CRLF _ & "~" & $endtimeopendoc & " Minuten verbleibend.", $iCurrentFile & " von " & $iAllFilecounter & " verarbeitet") $oWordApp.Visible = False ; Setzt das Fenster auf Unsichtbar, falls es durch irgendwelche Einflüsse sichtbar wurde $starttimeopendoc = _Timer_Init() $oDoc = _WordDocOpen($oWordApp, $aPaths[$iPaths] & $aDateien[$i], 0, 0, 0, 0, 0, "None") ;Das Passwort "None" verhindert den Passwortdialog If Not @error Then $sOldFileChangeTime = FileGetTime($aPaths[$iPaths] & $aDateien[$i], 0, 1) Local $aOldFileChangeTime = FileGetTime($aPaths[$iPaths] & $aDateien[$i]) FileWrite($sProtokoll, "Letzte Änderung: " & @TAB & $aOldFileChangeTime[2] & "." & $aOldFileChangeTime[1] & "." & $aOldFileChangeTime[0] & " " & $aOldFileChangeTime[3] & ":" & $aOldFileChangeTime[4] & ":" & $aOldFileChangeTime[5] & @CRLF) If $aDocFormate[$iFormat] = "*.doc" Or $aDocFormate[$iFormat] = "*.docx" Then FileWrite($sProtokoll, "Alte Vorlage: " & @TAB & @TAB & _WordDocPropertyGet($oDoc, 6) & @CRLF) $oDoc.AttachedTemplate = "";Vorlage wird entfernt FileWrite($sProtokoll, "Neue Vorlage: " & @TAB & @TAB & _WordDocPropertyGet($oDoc, 6) & @CRLF) EndIf If $bSave = True Then $oDoc.SaveAs($aPaths[$iPaths] & $aDateien[$i]);Wird erneut gespeichert _WordDocClose($oDoc) FileSetTime($aPaths[$iPaths] & $aDateien[$i], $sOldFileChangeTime) $endtimeopendoc = Round(_Timer_Diff($starttimeopendoc) * ($iAllFilecounter - $iCurrentFile) / 60000, 2) EndIf Else $iCurrentFile += 1 EndIf If $iFormat <> 1 Then FileWrite($sProtokoll, " " & @CRLF) Next FileWrite($sProtokoll, " " & @CRLF) FileWrite($sProtokoll, "Anzahl " & $aDocFormate[$iFormat] & " Dateien: " & $aDateien[0] & " Dauer bisher: " & Round(_Timer_Diff($starttime) / 60000, 2) & " Minuten" & @CRLF) $aDateien = _FileListToArray($aPaths[$iPaths], "*.wbk", 1);entfernen der Sicherungsdateien If UBound($aDateien) <> 0 Then For $i = 1 To $aDateien[0] ProgressSet($i * 100 / $aDateien[0], $i & " von " & $aDateien[0] & " Sicherungsdateien entfernt", $aDateien[$i]) FileDelete($aPaths[$iPaths] & $aDateien[$i]) Next EndIf EndIf Next Next FileWrite($sProtokoll, "-------------------------------------------------------" & @CRLF) FileWrite($sProtokoll, "-------------------------------------------------------" & @CRLF) FileWrite($sProtokoll, $iAllFilecounter & " Dateien von " & $iCurrentFile & " Dateien sind in " & Round(_Timer_Diff($starttime) / 60000, 2) & " Minuten bearbeitet worden.") ProgressOff() _WordQuit($oWordApp) GUISetState(@SW_SHOW, $hGui) MsgBox(0, "", "Fertig") GUICtrlSetState($cStartenAll, $GUI_ENABLE) GUICtrlSetState($cStartenVorlage, $GUI_ENABLE) ShellExecute($sProtokoll) Else MsgBox(16, "", GUICtrlRead($cPath) & @CRLF & "Pfad konnte nicht gefunden werden") EndIf EndFunc ;==>_OfficeFix Func _ReFileListToString($path) ;by Oscar (Autoit.de) Local $count, $Files Local $dFileList = _FileListToArray($path, '*', 2) Local $pathall For $i = 0 To UBound($aDocFormate) - 1 $aDateien = _FileListToArray($path, $aDocFormate[$i], 1) If UBound($aDateien) <> 0 Then $iAllFilecounter += $aDateien[0] ProgressSet(0, $iAllFilecounter & " Word Dokumente gefunden.", $path) Next $pathall &= $path & "|" If IsArray($dFileList) Then For $i = 1 To $dFileList[0] Local $hSearch, $sFile $hSearch = FileFindFirstFile($path & $dFileList[$i] & "\" & '*.*') If $hSearch <> -1 Then While 1 $sFile = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf If StringInStr(FileGetAttrib($path & $dFileList[$i] & "\" & $sFile), "D") <> 0 Then ContinueLoop $count += 1 $Files &= $path & $dFileList[$i] & "\" & $sFile & '|' WEnd FileClose($hSearch) EndIf _ReFileListToString($path & $dFileList[$i] & '\') Next EndIf Return StringSplit(StringTrimRight($pathall, 1), "|", 2) EndFunc ;==>_ReFileListToString Func MyErrFunc() ; Wichtig: Die Fehler-Objektvariable muss $oWordErrorHandler genannt werden! $ErrorDescription = StringStripWS($oWordErrorHandler.description, 2) FileWrite($sProtokoll, "COM-Fehler: " & $ErrorDescription & @CRLF) SetError(1) Return EndFunc ;==>MyErrFunc
Dauerhaft angemeldet bleiben?