C# Microsoft Word中的SaveCopyAs行为

C# Microsoft Word中的SaveCopyAs行为,c#,ms-word,com,office-interop,add-in,C#,Ms Word,Com,Office Interop,Add In,众所周知,Word不像PowerPoint或Excel那样提供SaveCopyAs。我尝试了不同的方法,但没有令人满意的结果 我可以使用正确的格式(元素定位->wdPasteDefault)或正确的样式(字体和颜色->wdPasteDefault)动态复制文档 如果用户关闭原始文档,则必须询问他是否应保存文档并选择路径 目前,我已经在Word 2016上尝试了不同的方法。最后,我想支持2010年到2016年 一种方法是: object wdWhat = Microsoft.Off

众所周知,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;

有一个众所周知的解决方案,可能对您来说已经足够好了:

using System.Runtime.InteropServices.ComTypes;

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

您好,您能否更具体地说明任务-提示用户在原始文档关闭之前保存副本?你能发布一些你已经尝试过的代码吗?嗨,瓦西,我想复制一个活动的Word文档,将其保存到某个临时位置。用户不必先保存文档。我想要与Microsoft.Office.Interop.PowerPoint或Microsoft.Office.Interop.Word中的SaveCopyAs功能完全相同的bavior。这正是我搜索的内容,我无法通过dearch engine找到此解决方案。。。谢谢!