TortoiseSVNSVN比较office2007文档完美解决

  目前 TortoiseSVN 版本比较和合并 OFFICE2007 .docx,xlsx,pptx… )的文档是有问题的,导致大家只能人工合并修订版本。这样有风险也很不方便。今天研究了下 SVN 的文档比较逻辑,这个问题已完美解决。

1       SVN 比较报错

  当在后缀为 .docx word 文档上点击右键选择 ” TortoiseSVN”->” 比较差异 时,会报下面的错,导致比较失败。

 

2       解决办法:

1.       右键菜单选择 ” TortoiseSVN”->” 设置 ,弹出下面的“ TortoiseSVN 设置”对话框。

2.       点击上图中的标 A 的选项 外部程序 : 差异查看器 ,弹出的对话框中,点击 高级设置 按钮,难后弹出下面的对话框,点击添加,可以追加其它类型的打开程序。以 .docx 为例:选择第一行类型为 .doc 的记录。点击“编辑 (E)…. , 复制程序的路径;然后,点击“添加 (A)… ”,第一个文档框填“ .docx ”,第二个 ”Ctrl+V” “粘贴”。点击确定,完成。其它类型的文档可以依照此例添加。

3.       选择“ TortoiseSVN 设置”对话框中标 B 的选项“外部程序 : 合并工具”,设置与第 2 步一致。

3       绝招:

上面的设置如果完成,就不会报错了,而且可以打开比较界面,以为这样已经完全解决就危险了。仔细看下比较界面,你会发现。我们是拿原版与修改版比较,正好反过来。如果合并的话,你的修改就全没了。补救措施如下:替换 TortoiseSVN 安装目录 Diff-Scripts 下的 diff-doc.js 文件。

diff-doc.js

 

var objArgs,num,sBaseDoc,sNewDoc,objScript,word,destination;
// Microsoft Office versions for Microsoft Windows OS
var vOffice2000 = 9;
var vOffice2002 = 10;
var vOffice2003 = 11;
var vOffice2007 = 12;
// WdCompareTarget
var wdCompareTargetSelected = 0;
var wdCompareTargetCurrent = 1;
var wdCompareTargetNew = 2;
// WdViewType
var wdMasterView = 5;
var wdNormalView = 1;
var wdOutlineView = 2;
// WdSaveOptions
var wdDoNotSaveChanges = 0;
var wdPromptToSaveChanges = -2;
var wdSaveChanges = -1;
objArgs = WScript.Arguments;
num = objArgs.length;
if (num < 2)
{
   WScript.Echo("Usage: [CScript | WScript] diff-doc.js base.doc new.doc");
   WScript.Quit(1);
}

sBaseDoc = objArgs(0);
sNewDoc = objArgs(1);

objScript = new ActiveXObject("Scripting.FileSystemObject" );
if ( ! objScript.FileExists(sBaseDoc))
{
    WScript.Echo("File " + sBaseDoc + " does not exist.  Cannot compare the documents.");
    WScript.Quit(1);
}
if ( ! objScript.FileExists(sNewDoc))
{
    WScript.Echo("File " + sNewDoc + " does not exist.  Cannot compare the documents.");
    WScript.Quit(1);
}

objScript = null;

try
{
   word = WScript.CreateObject("Word.Application") ;
}
catch(e)
{
   WScript.Echo("You must have Microsoft Word installed to perform this operation.");
   WScript.Quit(1);
}

word.visible = true;

//for office2007, must switch sBaseDoc <----> sNewDoc
//for later,I don't know!
if (word.Version == vOffice2007)
{
    var temp = sNewDoc;
    sNewDoc = sBaseDoc;
    sBaseDoc = temp;
}

// Open the new document
destination = word.Documents.Open(sNewDoc) ;

// If the Type property returns either wdOutlineView or wdMasterView and the Count property returns zero, the current document is an outline.
if (((destination.ActiveWindow.View.Type == wdOutlineView) || (destination.ActiveWindow.View.Type == wdMasterView)) && (destination.Subdocuments.Count == 0))
{
    // Change the Type property of the current document to normal
    destination.ActiveWindow.View.Type = wdNormalView;
}

// Compare to the base document
if (Number(word.Version) <= vOffice2000)
{
    // Compare for Office 2000 and earlier
    destination.Compare(sBaseDoc);
}
else
{
    // Compare for Office XP (2002) and later
    destination.Compare(sBaseDoc, "Comparison", wdCompareTargetNew, true, true);
}
  
// Show the comparison result
if (Number(word.Version) < vOffice2007)
{
    word.ActiveDocument.Windows(1).Visible = 1;
}
  
// Mark the comparison document as saved to prevent the annoying
// "Save as" dialog from appearing.
word.ActiveDocument.Saved = 1;
  
// Close the first document
if (Number(word.Version) >= vOffice2002)
{
    destination.Close(wdDoNotSaveChanges);
}

 

你可能感兴趣的:(TortoiseSVNSVN比较office2007文档完美解决)