Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
![]()
I'm using Microsoft Word documents with a revision control system
(Mercurial). And I want MS Word to handle the merge and comparison when there are conflicts. The only way for the tool to handle external programs is to invoke them via command line (that means, no dde). Is there a way to invoke Compare and Merge in word via command line switches? I can't see it in the documentation. If that doesn't really exist, I 'm thinking of two possible solutions: 1) Make a macro which does the invoking. 2) Make a program which invokes the compare and merge via COM. Any suggestions on what I should do? |
#3
![]()
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
![]()
But there's no way to pass (macro) parameters into the macros invoked that
way right? "Herb Tyson [MVP]" wrote: Your best bet might be to put the instructions into a macro, then invoke the macro from the command line. For example: "C:\Program Files\Microsoft Office\Office12\WINWORD.EXE" /mDoTheMerge starts Word and runs a macro named "DoTheMerge". The command specified after /m can be a macro or a built-in Word command. -- Herb Tyson MS MVP Author of the Word 2007 Bible Blog: http://word2007bible.herbtyson.com Web: http://www.herbtyson.com "Wilhansen Li" Wilhansen wrote in message ... I'm using Microsoft Word documents with a revision control system (Mercurial). And I want MS Word to handle the merge and comparison when there are conflicts. The only way for the tool to handle external programs is to invoke them via command line (that means, no dde). Is there a way to invoke Compare and Merge in word via command line switches? I can't see it in the documentation. If that doesn't really exist, I 'm thinking of two possible solutions: 1) Make a macro which does the invoking. 2) Make a program which invokes the compare and merge via COM. Any suggestions on what I should do? |
#4
![]()
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
![]()
I don't think there's really anyway so what I did was I opened both files and
invoked the compare operation like this: Sub CompareAndMerge() file1 = ActiveDocument.FullName ActiveDocument.Close file2 = ActiveDocument.FullName ActiveDocument.Close Documents.Open(file1).Merge (file2) End Sub So I just invoke it via command like like this: WINWORD.exe mine.doc theirs.doc /mCompareAndMerge Is this good enough? or are there better ways to do it? |
#5
![]()
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
![]()
You could have your application write a text file to a known location, with
that file containing the full paths to the two files. Then the macro can read the text file to get the file paths to use in the merge. You are correct that there is no way to pass parameters directly on the command line to a macro that's invoked with the /m switch. -- Regards, Jay Freedman Microsoft Word MVP FAQ: http://word.mvps.org Email cannot be acknowledged; please post all follow-ups to the newsgroup so all may benefit. Wilhansen Li wrote: I don't think there's really anyway so what I did was I opened both files and invoked the compare operation like this: Sub CompareAndMerge() file1 = ActiveDocument.FullName ActiveDocument.Close file2 = ActiveDocument.FullName ActiveDocument.Close Documents.Open(file1).Merge (file2) End Sub So I just invoke it via command like like this: WINWORD.exe mine.doc theirs.doc /mCompareAndMerge Is this good enough? or are there better ways to do it? |
#6
![]()
Posted to microsoft.public.word.docmanagement
|
|||
|
|||
![]()
Additionally, I also found a merge/diff script using the Windows Scripting
Host he http://tortoisesvn.tigris.org/source...ts/diff-doc.js http://tortoisesvn.tigris.org/source...s/merge-doc.js Which calls Word via COM as I suspected. Below is a copy-paste of diff-doc.js just as a reference: var objArgs,num,sBaseDoc,sNewDoc,objScript,word,destin ation; // 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); } try { word = WScript.CreateObject("Word.Application"); } catch(e) { // before giving up, try with OpenOffice try { var OO; OO = WScript.CreateObject("com.sun.star.ServiceManager" ); } catch(e) { WScript.Echo("You must have Microsoft Word or OpenOffice installed to perform this operation."); WScript.Quit(1); } // yes, OO is installed - do the diff with that one instead var objFile = objScript.GetFile(sNewDoc); if ((objFile.Attributes & 1)==1) { // reset the readonly attribute objFile.Attributes = objFile.Attributes & (~1); } //Create the DesktopSet var objDesktop = OO.createInstance("com.sun.star.frame.Desktop"); var objUriTranslator = OO.createInstance("com.sun.star.uri.ExternalUriRef erenceTranslator"); //Adjust the paths for OO sBaseDoc = sBaseDoc.replace(/\\/g, "/"); sBaseDoc = sBaseDoc.replace(/:/g, "|"); sBaseDoc = sBaseDoc.replace(/ /g, "%20"); sBaseDoc="file:///" + sBaseDoc; sBaseDoc=objUriTranslator.translateToInternal(sBas eDoc); sNewDoc = sNewDoc.replace(/\\/g, "/"); sNewDoc = sNewDoc.replace(/:/g, "|"); sNewDoc = sNewDoc.replace(/ /g, "%20"); sNewDoc="file:///" + sNewDoc; sNewDoc=objUriTranslator.translateToInternal(sNewD oc); //Open the %base document var oPropertyValue = new Array(); oPropertyValue[0] = OO.Bridge_GetStruct("com.sun.star.beans.PropertyVa lue"); oPropertyValue[0].Name = "ShowTrackedChanges"; oPropertyValue[0].Value = true; var objDocument=objDesktop.loadComponentFromURL(sNewDo c,"_blank", 0, oPropertyValue); //Set the frame var Frame = objDesktop.getCurrentFrame(); var dispatcher=OO.CreateInstance("com.sun.star.frame.D ispatchHelper"); //Execute the comparison dispatcher.executeDispatch(Frame, ".uno:ShowTrackedChanges", "", 0, oPropertyValue); oPropertyValue[0].Name = "URL"; oPropertyValue[0].Value = sBaseDoc; dispatcher.executeDispatch(Frame, ".uno:CompareDocuments", "", 0, oPropertyValue); WScript.Quit(0); } objScript = null; word.visible = true; // 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); } |
Reply |
Thread Tools | |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Compare and Merge | Microsoft Word Help | |||
Compare and Merge €“ Legal Black Line - Word XP | Microsoft Word Help | |||
How do I select a vert block (alt-drag) without invoking research | New Users | |||
Compare and Merge summary | Microsoft Word Help | |||
merge and compare | Microsoft Word Help |