SaveCopyAs在Microsoft Word中的行为

时间:2017-10-26 06:13:24

标签: c# ms-word com office-interop add-in

众所周知,Word不提供像PowerPoint或Excel这样的SaveCopyAs。我尝试了不同的方法,但没有令人满意的结果。

我可以使用正确的格式(元素的定位 - > wdPasteDefault)或正确的样式(字体和颜色 - > wdPasteDefault)即时复制文档。

如果用户关闭原始文档,则必须询问是否应保存文档并选择路径。

目前我在Word 2016上尝试了不同的方法。最后,我想支持2010年至2016年。

一种方法是:

        object wdWhat = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage;
        object wdWhich = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToAbsolute;

        Microsoft.Office.Interop.Word.Range range = document.Range(ref missObj, ref missObj);
        Microsoft.Office.Interop.Word.Range pageRange = document.Range(ref missObj, ref missObj);

        pageRange.Start = range.GoTo(ref wdWhat, ref wdWhich, ref missObj, ref missObj).Start;
        pageRange.End = document.Range(ref missObj, ref missObj).End;
        pageRange.Copy();

        Microsoft.Office.Interop.Word.Document newDoc = AddinModule.CurrentInstance.WordApp.Documents.Add(ref missObj, ref missObj, ref missObj, ref missObj);

        newDoc.PageSetup.PageWidth = document.PageSetup.PageWidth;
        newDoc.PageSetup.PageHeight = document.PageSetup.PageHeight;
        AddinModule.CurrentInstance.WordApp.Selection.PasteAndFormat(Microsoft.Office.Interop.Word.WdRecoveryType.wdPasteDefault);

        object newDocName = filePath;
        newDoc.SaveAs(ref newDocName, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj, ref missObj);
        object saveChanges = WdSaveOptions.wdSaveChanges;
        ((Microsoft.Office.Interop.Word._Document)newDoc).Close(saveChanges, ref missObj, ref missObj);
        Marshal.ReleaseComObject(newDoc);
        newDoc = null;

1 个答案:

答案 0 :(得分:3)

IPersistFile有一个众所周知的解决方案,也许对你来说还不错:

using System.Runtime.InteropServices.ComTypes;

var f = (IPersistFile)doc;
f.Save("[path]", false);