批处理之家's Archiver

老刘1号 发表于 2019-10-28 14:15

去除WORD文档限制编辑

[i=s] 本帖最后由 老刘1号 于 2019-10-28 14:19 编辑 [/i]

[quote]手动:选中Word文档拖拽到VBS文件上(支持拖拽多个)。
命令行:Cscript -nologo VBS路径 Word文档1 Word文档2 ...
[/quote]
上色工具:[url]http://www.bathome.net/thread-47323-1-1.html[/url]
[color=Red][size=6]以下为VBS:[/size][/color]

[color=Green]Rem Code By 老刘[/color]
[color=Green]Rem 转载请标明作者[/color]

[color=DeepSkyBlue]Option[/color] [color=DeepSkyBlue]Explicit[/color]
[color=DeepSkyBlue]Const[/color] wdNewBlankDocument [color=DarkOrange]=[/color] 0 [color=Green]'空白新文档[/color]
[color=DeepSkyBlue]Const[/color] wdFormatXMLDocument [color=DarkOrange]=[/color] 12 [color=Green]'.DOCX[/color]
[color=DeepSkyBlue]Const[/color] wdFormatFlatXML [color=DarkOrange]=[/color] 19 [color=Green]'.XML[/color]

[color=DeepSkyBlue]Dim[/color] fso
[color=DeepSkyBlue]Set[/color] fso [color=DarkOrange]=[/color] [color=Red]CreateObject[/color][color=DarkOrange]([/color][color=Gray]"Scripting.FileSystemObject"[/color][color=DarkOrange])[/color]
[color=DeepSkyBlue]Dim[/color] objXmlDom
[color=DeepSkyBlue]Set[/color] objXmlDom [color=DarkOrange]=[/color] [color=Red]CreateObject[/color][color=DarkOrange]([/color][color=Gray]"Microsoft.XMLDOM"[/color][color=DarkOrange])[/color]
[color=DeepSkyBlue]Dim[/color] objWord
[color=DeepSkyBlue]On[/color] Error [color=DeepSkyBlue]Resume[/color] [color=DeepSkyBlue]Next[/color]
[color=DeepSkyBlue]Set[/color] objWord [color=DarkOrange]=[/color] [color=Red]GetObject[/color][color=DarkOrange]([/color][color=DarkOrange],[/color][color=Gray]"Word.Application"[/color][color=DarkOrange])[/color] [color=Green]'已有word运行则直接得到对象[/color]
[color=DeepSkyBlue]If[/color] Err[color=DarkOrange].[/color]Number [color=DarkOrange]<[/color][color=DarkOrange]>[/color] 0 [color=DeepSkyBlue]Then[/color]
    Err[color=DarkOrange].[/color]Clear
    [color=DeepSkyBlue]Set[/color] objWord [color=DarkOrange]=[/color] [color=Red]CreateObject[/color][color=DarkOrange]([/color][color=Gray]"Word.Application"[/color][color=DarkOrange])[/color]
    [color=DeepSkyBlue]If[/color] Err[color=DarkOrange].[/color]Number [color=DarkOrange]<[/color][color=DarkOrange]>[/color] 0 [color=DeepSkyBlue]Then[/color]
        [color=DeepSkyBlue]If[/color] [color=Red]UCase[/color][color=DarkOrange]([/color]fso[color=DarkOrange].[/color]GetBaseName[color=DarkOrange]([/color][color=Blue]WScript[/color][color=DarkOrange].[/color]FullName[color=DarkOrange])[/color][color=DarkOrange])[/color] [color=DarkOrange]=[/color] [color=Gray]"CSCRIPT"[/color] [color=DeepSkyBlue]Then[/color]
            [color=Blue]WScript[/color][color=DarkOrange].[/color]StdErr[color=DarkOrange].[/color]WriteLine [color=Gray]"老刘的温馨提示:Word的COM自动化组件无法创建!"[/color]
        [color=DeepSkyBlue]Else[/color]
            [color=Red]MsgBox[/color] [color=Gray]"Word的COM自动化组件无法创建!"[/color][color=DarkOrange],[/color][color=Blue]vbQuestion[/color][color=DarkOrange],[/color][color=Gray]"老刘的温馨提示"[/color]
        [color=DeepSkyBlue]End[/color] [color=DeepSkyBlue]If[/color]
        [color=Blue]WScript[/color][color=DarkOrange].[/color]Quit 1
    [color=DeepSkyBlue]End[/color] [color=DeepSkyBlue]If[/color]
[color=DeepSkyBlue]End[/color] [color=DeepSkyBlue]If[/color]
[color=DeepSkyBlue]On[/color] Error [color=DeepSkyBlue]Goto[/color] 0

[color=DeepSkyBlue]Dim[/color] objWordDocument[color=DarkOrange],[/color]strArg[color=DarkOrange],[/color]objXmlDocument[color=DarkOrange],[/color]objProtecctionNodes[color=DarkOrange],[/color]objProtecctionNode
[color=DeepSkyBlue]For[/color] [color=DeepSkyBlue]Each[/color] strArg [color=DeepSkyBlue]In[/color] [color=Blue]WScript[/color][color=DarkOrange].[/color]Arguments
[color=Green]    Rem 文档→XML。[/color]
    [color=DeepSkyBlue]With[/color] objWord
        [color=DeepSkyBlue]Set[/color] objWordDocument [color=DarkOrange]=[/color] fso[color=DarkOrange].[/color]GetFile[color=DarkOrange]([/color]strArg[color=DarkOrange])[/color]
        [color=DarkOrange].[/color]ChangeFileOpenDirectory objWordDocument[color=DarkOrange].[/color]ParentFolder [color=DarkOrange]&[/color] [color=Gray]"\"[/color]
        [color=DarkOrange].[/color]Documents[color=DarkOrange].[/color]Open objWordDocument[color=DarkOrange].[/color]Name[color=DarkOrange],[/color] [color=DeepSkyBlue]False[/color][color=DarkOrange],[/color] [color=DeepSkyBlue]True[/color]
        [color=DarkOrange].[/color]ChangeFileOpenDirectory Fso[color=DarkOrange].[/color]GetSpecialFolder[color=DarkOrange]([/color]2[color=DarkOrange])[/color] [color=DarkOrange]&[/color] [color=Gray]"\"[/color]
        [color=DarkOrange].[/color]ActiveDocument[color=DarkOrange].[/color]SaveAs2 _
            fso[color=DarkOrange].[/color]GetBaseName[color=DarkOrange]([/color]objWordDocument[color=DarkOrange].[/color]Path[color=DarkOrange])[/color][color=DarkOrange]&[/color][color=Gray]".XML"[/color][color=DarkOrange],[/color] _
            wdFormatFlatXML
        [color=DarkOrange].[/color]ActiveDocument[color=DarkOrange].[/color]Close
        [color=DeepSkyBlue]Set[/color] objXmlDocument [color=DarkOrange]=[/color] _
            fso[color=DarkOrange].[/color]GetFile[color=DarkOrange]([/color] _
            fso[color=DarkOrange].[/color]GetSpecialFolder[color=DarkOrange]([/color]2[color=DarkOrange])[/color] [color=DarkOrange]&[/color] [color=Gray]"\"[/color] [color=DarkOrange]&[/color] _
            fso[color=DarkOrange].[/color]GetBaseName[color=DarkOrange]([/color]objWordDocument[color=DarkOrange].[/color]Path[color=DarkOrange])[/color] [color=DarkOrange]&[/color] [color=Gray]".XML"[/color] _
            [color=DarkOrange])[/color]
    [color=DeepSkyBlue]End[/color] [color=DeepSkyBlue]With[/color]
   
[color=Green]    Rem 去除w:documentProtection节点。[/color]
    [color=DeepSkyBlue]With[/color] objXmlDom
        [color=DarkOrange].[/color]load objXmlDocument[color=DarkOrange].[/color]Path
        [color=DeepSkyBlue]Set[/color] objProtecctionNodes [color=DarkOrange]=[/color] [color=DarkOrange].[/color]getElementsByTagName[color=DarkOrange]([/color][color=Gray]"w:documentProtection"[/color][color=DarkOrange])[/color]
        [color=DeepSkyBlue]If[/color] objProtecctionNodes[color=DarkOrange].[/color]length [color=DarkOrange]=[/color] 0 [color=DeepSkyBlue]Then[/color]
            [color=DeepSkyBlue]If[/color] [color=Red]UCase[/color][color=DarkOrange]([/color]fso[color=DarkOrange].[/color]GetBaseName[color=DarkOrange]([/color][color=Blue]WScript[/color][color=DarkOrange].[/color]FullName[color=DarkOrange])[/color][color=DarkOrange])[/color] [color=DarkOrange]=[/color] [color=Gray]"CSCRIPT"[/color] [color=DeepSkyBlue]Then[/color]
                [color=Blue]WScript[/color][color=DarkOrange].[/color]StdErr[color=DarkOrange].[/color]WriteLine objWordDocument[color=DarkOrange].[/color]Name[color=DarkOrange]&[/color][color=Gray]" 未被限制编辑"[/color]
            [color=DeepSkyBlue]End[/color] [color=DeepSkyBlue]If[/color]
        [color=DeepSkyBlue]Else[/color]
            [color=DeepSkyBlue]For[/color] [color=DeepSkyBlue]Each[/color] objProtecctionNode [color=DeepSkyBlue]In[/color] objProtecctionNodes
                objProtecctionNode[color=DarkOrange].[/color]parentNode[color=DarkOrange].[/color]removeChild[color=DarkOrange]([/color]objProtecctionNode[color=DarkOrange])[/color]
            [color=DeepSkyBlue]Next[/color]
        [color=DeepSkyBlue]End[/color] [color=DeepSkyBlue]If[/color]
        [color=DarkOrange].[/color]save objXmlDocument[color=DarkOrange].[/color]Path
        [color=DarkOrange].[/color]abort
    [color=DeepSkyBlue]End[/color] [color=DeepSkyBlue]With[/color]
   
[color=Green]    Rem XML→DOCX。[/color]
    [color=DeepSkyBlue]With[/color] objWord
        [color=DarkOrange].[/color]Documents[color=DarkOrange].[/color]Open objXmlDocument[color=DarkOrange].[/color]Name
        [color=DarkOrange].[/color]ChangeFileOpenDirectory objWordDocument[color=DarkOrange].[/color]ParentFolder [color=DarkOrange]&[/color] [color=Gray]"\"[/color]
        [color=DarkOrange].[/color]ActiveDocument[color=DarkOrange].[/color]SaveAs2 _
            [color=Gray]"[Unlocked]"[/color][color=DarkOrange]&[/color]fso[color=DarkOrange].[/color]GetBaseName[color=DarkOrange]([/color]objWordDocument[color=DarkOrange].[/color]Path[color=DarkOrange])[/color][color=DarkOrange]&[/color][color=Gray]".DOCX"[/color][color=DarkOrange],[/color] _
            wdFormatXMLDocument
        [color=DarkOrange].[/color]ActiveDocument[color=DarkOrange].[/color]Close
        objXmlDocument[color=DarkOrange].[/color]Delete [color=DeepSkyBlue]True[/color]
    [color=DeepSkyBlue]End[/color] [color=DeepSkyBlue]With[/color]
[color=DeepSkyBlue]Next[/color]

objWord[color=DarkOrange].[/color]Visible [color=DarkOrange]=[/color] [color=DeepSkyBlue]True[/color]
[color=DeepSkyBlue]Set[/color] fso [color=DarkOrange]=[/color] [color=DeepSkyBlue]Nothing[/color]
[color=DeepSkyBlue]Set[/color] objXmlDom [color=DarkOrange]=[/color] [color=DeepSkyBlue]Nothing[/color]
[color=DeepSkyBlue]Set[/color] objWord [color=DarkOrange]=[/color] [color=DeepSkyBlue]Nothing[/color] [color=Green]'该操作不会关闭Word[/color]
[color=Blue]WScript[/color][color=DarkOrange].[/color]Echo [color=Gray]"老刘的提醒:由于要保证处理速度(开关WORD太费时),不使用时请手动退出WORD。"[/color]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.