将一个文档插入另一个Microsoft.Office.Interop.Word

问题描述 投票:1回答:2

我正在处理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这是错误的做法?

c# office-interop word
2个回答
1
投票

我用复制粘贴解决方案弄清楚了。我需要这样复制:

MyDoc.ActiveWindow.Selection.Copy();
doc.ActiveWindow.Selection.PasteAndFormat(Word.WdRecoveryType.wdFormatOriginalFormatting);

然后保留字体样式。但是有时候,如果文档中有表,它将把它们复制到下一页。真奇怪InsertFile方法不适用于我。


0
投票

PasteFormat将仅粘贴格式,而不粘贴内容,应在CopyFormat方法之后使用。应该使用PasteAndFormat方法粘贴具有或不具有WdRecoveryType常量定义的格式的内容。在这里您应该使用:

doc.ActiveWindow.Selection.PasteAndFormat(Word.WdRecoveryType.wdFormatOriginalFormatting);

有关更多信息,请阅读PasteAndFormat methodWdRecoveryType constant

© www.soinside.com 2019 - 2024. All rights reserved.