papapa314 发表于 2011-3-19 14:24:07

批量处理doc文档是遇到无法处理的文档即出错退出

本帖最后由 papapa314 于 2011-3-19 14:27 编辑

批量处理doc文档的时候碰到这样的问题:当doc文档的编码有问题或者为文件属性为只读的时候,程序马上出错退出。请问各位,如何判断这类无法处理的doc文档,然后自动跳过这些文档,保证程序不会出错?
以下是部分源码,我用设置文件属性的方法,遇到某些doc文档还是程序还是直接退出。出错原因是word UDF的一个函数
        $o_doc = $o_object.Documents.Open ($s_FilePath, $f_ConfirmConversions, $f_ReadOnly, $f_AddToRecentFiles, _
                        $s_PasswordDocument, "", $f_Revert, $s_WritePasswordDocument, "", $i_Format)
        If Not IsObj($o_doc) Then
                __WordErrorNotify("Error", "_WordDocOpen", "", "Document Object Creation Failed")
                Return SetError($_WordStatus_GeneralError, 0, 0)
        EndIf

谢谢您的关注!!!



#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include<file.au3>
#include<array.au3>
#include <Word.au3>
#Include <GuiListView.au3>



$Form1_1 = GUICreate("word改内容测试", 587, 572);这个要放在使用时间限制的前面。
$listview1=GUICtrlCreateListView("路径",50,50,400,400)
$buton1=GUICtrlCreateButton("添加",450,450,50,50)
$buton2=GUICtrlCreateButton("开始",520,520,50,50)
GUISetState()


While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $buton1
                        open()
                Case $buton2
                        start()
        EndSwitch
WEnd

       



Func open()

$file=FileOpenDialog("","","(*.doc)",4)
;MsgBox(0,0,$file)
$filearray=StringSplit($file,"|")
;_ArrayDisplay($filearray)
Dim $path[$filearray-1]
For $i=0 To $filearray-2
        $path[$i]=$filearray&"\"&$filearray[$i+2]
Next;...........................................多选文件时得到每个文件的完整路径

;_ArrayDisplay($path)
For $i=0 To $filearray-2
;MsgBox(0,0,$path[$i])

GUICtrlCreateListViewItem($path[$i],$listview1)

Next

EndFunc




Func start()
       
For $i=0 To _GUICtrlListView_GetItemCount($listview1)-1

        $oWordApp = _WordCreate(_GUICtrlListView_GetItemText($listview1,$i),1,0)
        $oWordDoc = _WordDocGetCollection($oWordApp, 0)
        If Not @error Then
        $oWordDoc.Range.insertBefore("大家好");在文档开头加入一段话
        EndIf


        _WordDocClose($oWordDoc,-1)

        _WordQuit ($oWordApp, -1)


       
Next
EndFunc

kevinch 发表于 2011-3-20 12:29:28

if $oWordDoc.ReadOnly=false then $oWordDoc.Range.insertBefore("大家好")判断只读可以加上这个判断
不知 楼主所说的编码有问题是什么情况。

kevinch 发表于 2011-3-20 12:37:37

最好修改和保存放在一起处理,一起判断执行。

papapa314 发表于 2011-3-21 16:13:40

回复 2# kevinch


    谢谢热心回复。编码问题就是当文档里有乱码的话软件就自动退出,还有一些word文档,也不知道有什么问题,手动打开是正常的,但就是无法处理,一处理到这个文档软件就自动退出。不知道如何判断这类无法处理的文档?

kevinch 发表于 2011-3-21 18:52:00

回复kevinch


    谢谢热心回复。编码问题就是当文档里有乱码的话软件就自动退出,还有一些word文档 ...
papapa314 发表于 2011-3-21 16:13 http://www.autoitx.com/images/common/back.gif
还真没遇到过你说的那样的文件,乱码应该不影响打开的情况,除非打开时有询问编码的情况,没遇到,还真没概念。
页: [1]
查看完整版本: 批量处理doc文档是遇到无法处理的文档即出错退出