我正在处理Word VSTO插件。我编写了将一个文档插入另一个文档的代码。我有两种不同的方法。复制/粘贴和InsertFile:1)
var app = new Word.Application();
var MyDoc = app.Documents.Add(@"C:\install\CSharp\Plank.dotm");
MyDoc.ActiveWindow.Selection.WholeStory();
MyDoc.ActiveWindow.Selection.CopyFormat();
Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
doc.Activate();
doc.ActiveWindow.Selection.PasteFormat();
2)
var app = new Word.Application();
var MyDoc = app.Documents.Add(@"C:\install\CSharp\Plank.dotm");
Word.Document doc = Globals.ThisAddIn.Application.ActiveDocument;
doc.Activate();
//Taking margins
float TopMargin = MyDoc.PageSetup.TopMargin;
float RightMargin = MyDoc.PageSetup.RightMargin;
float LeftMargin = MyDoc.PageSetup.LeftMargin;
Globals.ThisAddIn.Application.Selection.InsertFile(@"C:\\install\CSharp\Plank.dotm", Link: false, Attachment: false);
第一种方法,PasteFormat()行不起作用。告诉我没有复制文本属性。 (如果我仅使用copy()和paste(),则可以使用)。即使我手动粘贴,我也会得到想要的东西。在第二种方法中,它可以工作,但是并不需要采用文本格式。所以我得到的文本格式和大小与原始格式有所不同。问题是:如何保留原始字体格式?我试图在Word中手动插入文件。而且我也不能在那里获得原始文本格式。 Maby这是错误的做法?
我用复制粘贴解决方案弄清楚了。我需要这样复制:
MyDoc.ActiveWindow.Selection.Copy();
doc.ActiveWindow.Selection.PasteAndFormat(Word.WdRecoveryType.wdFormatOriginalFormatting);
然后保留字体样式。但是有时候,如果文档中有表,它将把它们复制到下一页。真奇怪InsertFile方法不适用于我。
PasteFormat将仅粘贴格式,而不粘贴内容,应在CopyFormat方法之后使用。应该使用PasteAndFormat方法粘贴具有或不具有WdRecoveryType常量定义的格式的内容。在这里您应该使用:
doc.ActiveWindow.Selection.PasteAndFormat(Word.WdRecoveryType.wdFormatOriginalFormatting);
有关更多信息,请阅读PasteAndFormat method和WdRecoveryType constant