前言 写论文时,常做文件的变更,有时候修改时容易手误修改到其他正常的地方。
为了解决以上问题,考虑将Word文件放到Git上进行版本管理,方便追溯与版本对比。
但存在一个问题为,git不支持直接对Word文件进行diff,所以考虑自定义git diff工具,该工具能直接调用word的对比工具,方便查看文件的修改。
开始行动 新建处理脚本 该脚本的主要作用为,调用word接口,创建一个比较文件出来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 ' Word文档比较工具 ' 用法: cscript compare.vbs 原文档.doc 新文档.doc ' 1. 检查参数数量 If WScript.Arguments.Count <> 2 Then WScript.Echo "Usage: cscript compare.vbs file1.doc file2.doc" WScript.Echo "example: cscript compare.vbs a.doc b.doc" WScript.Quit End If WScript.Echo "VBScript run,param1: " & WScript.Arguments(0) WScript.Echo "VBScript run,param2: " & WScript.Arguments(1) ' 2. 获取文件路径 file1 = WScript.Arguments(0) file2 = WScript.Arguments(1) ' 3. 创建Word应用程序对象 On Error Resume Next Set wordApp = CreateObject("Word.Application") If Err.Number <> 0 Then WScript.Echo "error: can't create Word app object" WScript.Echo "make sure already installed Microsoft Word" WScript.Quit End If On Error GoTo 0 wordApp.Visible = True ' 确保Word可见 ' 4. 打开两个文档 On Error Resume Next Set doc1 = wordApp.Documents.Open(file1) If Err.Number <> 0 Then WScript.Echo "error: can't open file " & file1 wordApp.Quit WScript.Quit End If Set doc2 = wordApp.Documents.Open(file2) If Err.Number <> 0 Then WScript.Echo "error: can't open file " & file2 doc1.Close False wordApp.Quit WScript.Quit End If On Error GoTo 0 ' 5. 比较文档(开启所有比较选项) ' 参数说明: ' doc1 - 原文档对象 ' doc2 - 修订文档对象 ' 2 - wdCompareTargetNew (比较目标设为新文档) ' 0 - wdGranularityWordLevel ' 后面8个True对应所有比较选项 wordApp.CompareDocuments doc1, doc2, 2, 0, True, True, True, True, True, True, True, True ' 6. 比较完成后关闭原文档和修订文档 On Error Resume Next doc1.Close False doc2.Close False On Error GoTo 0 ' 7. 清理资源 Set doc1 = Nothing Set doc2 = Nothing Set wordApp = Nothing WScript.Echo "compare done."
当然这个脚本也可以直接使用,可以不配置到git中,配置到git中主要是为了比较工作区和暂存区的word文件
使用方法:cscript compare.vbs 源文件 修改后的文件(文件需要带上完整的路径)
举例:
1 cscript compare.vbs "C:\Users\fywfeng\Desktop\bachelor-degree\a.doc" "C:\Users\fywfeng\Desktop\bachelor-degree\b.doc"
配置git 直接在用户目录修改git的全局配置
一般路径位置:C:\Users\用户名
文件名:.gitconfig
新增内容
1 2 3 4 [difftool "worddiff"] cmd = "cscript \"E:\\SelfFiles\\bachelor-degree\\compare.vbs\" \"$LOCAL\" \"$PWD/$MERGED\"" [diff] tool = worddiff
这里的脚本路径换成自己的脚本路径,尽量不要包含中文
为了后续方便使用可以使用alias简化命令,继续在.gitconfig中新增
1 2 [alias] diffword = difftool --tool=worddiff --no-prompt
当然这里也可以选择使用git命令来加,需要注意路径需要加转义,这里就不过多赘述了。
试一试 执行指令
1 git difftool --tool =worddiff --no-prompt 文件名
或者使用alias的命令
如果目标文件存在工作区与暂存区的变更,则会弹出对比文件,如果不存在变更则不会弹出
举个栗子
1 2 3 4 5 6 7 E:\SelfFiles\flod>git diffword dir\task.doc Microsoft (R ) Windows Script Host Version 5.812 Copyright (C) Microsoft Corporation. All rights reserved. VBScript run,param1: C:\Users\fywfeng\AppData\Local\Temp/git-blob-a27680 /task.doc VBScript run,param2: E:/SelfFiles/flod/dir /task.doc compare done.
结语 仍有很多可以改进的地方,后续有用到的地方再更新迭代