aDo*_*eSo 3 c# com add-in ms-word office-interop
众所周知,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;
Run Code Online (Sandbox Code Playgroud)
IPersistFile有一个众所周知的解决方案,也许它对你来说已经足够了:
using System.Runtime.InteropServices.ComTypes;
var f = (IPersistFile)doc;
f.Save("[path]", false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
638 次 |
| 最近记录: |