【转载】[VBS]去除WORD文档限制编辑

Usage:
手动:选中Word文档拖拽到VBS文件上(支持拖拽多个)。
命令行:Cscript -nologo VBS路径 Word文档1 Word文档2 ... 

Rem Code By 老刘
Rem 转载请标明作者
 
Option Explicit
Const wdNewBlankDocument = 0 '空白新文档
Const wdFormatXMLDocument = 12 '.DOCX
Const wdFormatFlatXML = 19 '.XML
 
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim objXmlDom
Set objXmlDom = CreateObject("Microsoft.XMLDOM")
Dim objWord
On Error Resume Next
Set objWord = GetObject(,"Word.Application") '已有word运行则直接得到对象
If Err.Number <> 0 Then
        Err.Clear
        Set objWord = CreateObject("Word.Application")
        If Err.Number <> 0 Then
                If UCase(fso.GetBaseName(WScript.FullName)) = "CSCRIPT" Then
                        WScript.StdErr.WriteLine "老刘的温馨提示:Word的COM自动化组件无法创建!"
                Else
                        MsgBox "Word的COM自动化组件无法创建!",vbQuestion,"老刘的温馨提示"
                End If
                WScript.Quit 1
        End If
End If
On Error Goto 0
 
Dim objWordDocument,strArg,objXmlDocument,objProtecctionNodes,objProtecctionNode
For Each strArg In WScript.Arguments
        Rem 文档→XML。
        With objWord
                Set objWordDocument = fso.GetFile(strArg)
                .ChangeFileOpenDirectory objWordDocument.ParentFolder & "\"
                .Documents.Open objWordDocument.Name, False, True
                .ChangeFileOpenDirectory Fso.GetSpecialFolder(2) & "\"
                .ActiveDocument.SaveAs2 _
                        fso.GetBaseName(objWordDocument.Path)&".XML", _
                        wdFormatFlatXML
                .ActiveDocument.Close
                Set objXmlDocument = _
                        fso.GetFile( _
                        fso.GetSpecialFolder(2) & "\" & _
                        fso.GetBaseName(objWordDocument.Path) & ".XML" _
                        )
        End With
         
        Rem 去除w:documentProtection节点。
        With objXmlDom
                .load objXmlDocument.Path
                Set objProtecctionNodes = .getElementsByTagName("w:documentProtection")
                If objProtecctionNodes.length = 0 Then
                        If UCase(fso.GetBaseName(WScript.FullName)) = "CSCRIPT" Then
                                WScript.StdErr.WriteLine objWordDocument.Name&" 未被限制编辑"
                        End If
                Else
                        For Each objProtecctionNode In objProtecctionNodes
                                objProtecctionNode.parentNode.removeChild(objProtecctionNode)
                        Next
                End If
                .save objXmlDocument.Path
                .abort
        End With
         
        Rem XML→DOCX。
        With objWord
                .Documents.Open objXmlDocument.Name
                .ChangeFileOpenDirectory objWordDocument.ParentFolder & "\"
                .ActiveDocument.SaveAs2 _
                        "[Unlocked]"&fso.GetBaseName(objWordDocument.Path)&".DOCX", _
                        wdFormatXMLDocument
                .ActiveDocument.Close
                objXmlDocument.Delete True
        End With
Next
 
objWord.Visible = True
Set fso = Nothing
Set objXmlDom = Nothing
Set objWord = Nothing '该操作不会关闭Word
WScript.Echo "老刘的提醒:由于要保证处理速度(开关WORD太费时),不使用时请手动退出WORD。"

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值