Hallo @water,
das habe ich erst gemerkt, als ich nach deinem Beitrag txt ausprobiert habe. Bei rtf sah alles in Ordnung aus. _Word_DocSaveAs wirft aber keinen Fehler aus, wenn das falsche Format gespeichert wird. Seine beschriebene Fehlermeldung ist wenigstens soweit ich das (Word 2016) das vermuten kann ein Berechtigungsproblem.
Word-Dokument in einem geöffneten Word-Fenster öffnen.
-
chrisbyRRC -
17. Juni 2017 um 12:32 -
Erledigt
-
-
Ich spiele mich morgen mal mit diesem Problem.
-
Sagt bloß bei euch klappt es mit Word 2016?
Egal was ich mache, es klappt nichtAutoIt: Mein Skript-Aufruf
Alles anzeigen#RequireAdmin #include "Word.au3" $filepath=@MyDocumentsDir&"\Test.doc" Local $wordobject = _Word_Create() $hPid=_Word_DocOpen($wordobject,$filepath) Sleep(5000) $test=_Word_DocSaveAs($wordobject,@MyDocumentsDir&"\Test2.doc") ;doc if $test=0 then MsgBox(16,"T",@error&@CRLF&Hex(@extended))
AutoIt
Alles anzeigen; #FUNCTION# ==================================================================================================================== ; Author ........: water (based on the Word UDF written by Bob Anthony) ; Modified ......: ; =============================================================================================================================== Func _Word_DocSaveAs($oDoc, $sFileName = Default, $iFileFormat = Default, $bReadOnlyRecommended = Default, $bAddToRecentFiles = Default, $sPassword = Default, $sWritePassword = Default) ; Error handler, automatic cleanup at end of function Local $oError = ObjEvent("AutoIt.Error", "__Word_COMErrFunc") #forceref $oError If $sFileName = Default Then $sFileName = "" If $iFileFormat = Default Then $iFileFormat = $WdFormatDocument If $bReadOnlyRecommended = Default Then $bReadOnlyRecommended = False If $bAddToRecentFiles = Default Then $bAddToRecentFiles = 0 If $sPassword = Default Then $sPassword = "" If $sWritePassword = Default Then $sWritePassword = "" If Not IsObj($oDoc) Then Return SetError(1, 0, 0) $oDoc.SaveAs2($sFileName, $iFileFormat, False, $sPassword, $bAddToRecentFiles, $sWritePassword, $bReadOnlyRecommended) ; Try to save for >= Word 2010 If @error = 0x80020006 Then $oDoc.SaveAs($sFileName, $iFileFormat, False, $sPassword, $bAddToRecentFiles, $sWritePassword, $bReadOnlyRecommended) ; COM error "Unknown Name" hence save for <= Word 2007 If @error Then Return SetError(2, @error, 0) Return 1 EndFunc ;==>_Word_DocSaveAs
Wenn ich _Word_Create(), __Word_Open(), _Word_DocSaveAs() und __Word_CloseOnQuit() mit den Includes aus der Word.au3 direkt in mein Skript einfüge und jeweils mit einer 2 dahinter umbenannt ausführe stockt er mit folgenden Fehler:
Code
Alles anzeigen>"C:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" "C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "C:\Users\Username\Documents\Autoit-Projekte\test3.au3" /UserParams +>15:30:44 Starting AutoIt3Wrapper v.16.612.1119.0 SciTE v.3.6.6.0 Keyboard:00000407 OS:WIN_10/ CPU:X64 OS:X64 Environment(Language:0407) CodePage:0 utf8.auto.check:4 +> SciTEDir => C:\Program Files (x86)\AutoIt3\SciTE UserDir => C:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper >Running AU3Check (3.3.14.2) from:C:\Program Files (x86)\AutoIt3 input:C:\Users\Username\Documents\Autoit-Projekte\test3.au3 +>15:30:44 AU3Check ended.rc:0 >Running:(3.3.14.2):C:\Program Files (x86)\AutoIt3\autoit3.exe "C:\Users\Username\Documents\Autoit-Projekte\test3.au3" --> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop "C:\Program Files (x86)\AutoIt3\Include\Word3.au3" (65) : ==> The requested action with this object has failed.: $oDoc.SaveAs2($sFileName, $iFileFormat, False, $sPassword, $bAddToRecentFiles, $sWritePassword, $bReadOnlyRecommended) $oDoc^ ERROR ->15:30:49 AutoIt3.exe ended.rc:1 +>15:30:49 AutoIt3Wrapper Finished. >Exit code: 1 Time: 5.592
EDIT: @autoiter
An ein Berechtigungsproblem glaube ich nicht. UAC ist standardmäßig aus, RequireAdmin bringt keine Veränderung , SciTE wird bei mir als Admin ausgeführt und egal in welchen Pfad ich schreiben will bekomme ich eine Fehlermeldung. -
Hallo @chrisbyRRC,
Gerade erst gesehen, wo das Problem liegt. Gestern hatte ich es dummerweise mit eigenem Code getestet.
_Word_DocOpen gibt dir im Erfolgsfall eine Variable mit Objektreferenz zurück. Die kannst du dann für _Word_DocSaveAs benutzen. (Du bist hier davon ausgegangen es sei die Prozess ID?)
Also ändere
AutoIt$hPid=_Word_DocOpen($wordobject,$filepath) Sleep(5000) $test=_Word_DocSaveAs($wordobject,@MyDocumentsDir&"\Test2.doc") ;doc
etwa zu:AutoItLocal $oDoc=_Word_DocOpen($wordobject,$filepath) Sleep(5000) $test=_Word_DocSaveAs($oDoc,@MyDocumentsDir&"\Test2.doc") ;doc
Dann klappt es hoffentlich.
-
Oh man das is ja peinlich!
Ja, so klappt es natürlich. So oft das Skript überflogen, aber auf die Idee bin ich nicht gekommen...Dank dir!
-