首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# VSTO: InsertFile in RichText ContentControl在ContentControl之外

C# VSTO: InsertFile in RichText ContentControl在ContentControl之外
EN

Stack Overflow用户
提问于 2016-03-14 09:06:48
回答 1查看 698关注 0票数 0

我选择一个范围以外的书签职位(工作)。

代码语言:javascript
复制
Word.ContentControl wcc;
Word.Selection WSelection = wApp.Selection;
object obj;
obj = (object)wApp.ActiveDocument.Bookmarks.get_Item(bookmark).Range;

然后我在范围之前移动,添加一个段落并移到新的段落。这是因为我想在书签之前添加ContentControl (因为排序原因)(工作):

代码语言:javascript
复制
Word.Range WRange = WSelection.Range;
object count = 1;
object back = -1;
(obj as Word.Range).Move(Unit: Word.WdUnits.wdCharacter, Count: ref back);
(obj as Word.Range).Paragraphs.Add();
(obj as Word.Range).Move(Unit: Word.WdUnits.wdParagraph, Count: ref count);

现在我添加了一个ContentControl (工作):

代码语言:javascript
复制
wcc = WRange.ContentControls.Add(Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText, ref obj);
wcc.LockContentControl = true;
wcc.SetPlaceholderText(null, null, " ");
wcc.Tag = fileName;

现在我想在ContentControl中插入另一个词-File(不工作!):

代码语言:javascript
复制
wcc.Range.InsertFile(Path.Combine(path, fileName));

外部Word-File包含一个4行的表(只是一个示例文件)。内容现在是插入在ContentControl之后,而不是在里面?结果如下:

如果我试图设置ContentControl的文本,那么它工作得很好(内容"test“现在在ContentControl中):

代码语言:javascript
复制
wcc.Range.Text = "test";

由于上次测试的结果,我认为我选择了正确的范围,但是为什么表在ContentControl之外?

编辑:

我用代码记录了一个宏,我想要做的步骤是,我不能在一个ContentControl和其他字符的行中插入一个表(在我的例子中是一个空格)。为了得到这个解决方案,增加了一个段落:

代码语言:javascript
复制
Word.Range WRange = WSelection.Range;
object next = 1;
object back = -1;
(obj as Word.Range).Move(Unit: Word.WdUnits.wdCharacter, Count: ref back);
(obj as Word.Range).Paragraphs.Add();
(obj as Word.Range).Move(Unit: Word.WdUnits.wdParagraph, Count: ref next);
(obj as Word.Range).Paragraphs.Add();
(obj as Word.Range).Move(Unit: Word.WdUnits.wdCharacter, Count: ref back);
wcc = WRange.ContentControls.Add(Microsoft.Office.Interop.Word.WdContentControlType.wdContentControlRichText, ref obj);
wcc.LockContentControl = true;
wcc.SetPlaceholderText(null, null, " ");
wcc.Tag = fileName;
wcc.Range.InsertFile(Path.Combine(path, fileName));

结果是,在第一个和第二个添加的ContentControl之间有一个额外的段落(包括ContentControl中表的开头和结尾的段落),总共有3段.有没有人能提供更好的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 10:42:11

我创建了一个基于您的代码的小测试方法来做一些黑匣子测试。

为此,我创建了两个小文件:

  • testdoc1.docx,从新创建,插入带有=rand()的随机文本,添加了一个名为"testbookmark“的书签
  • cols,从新的、insert表中创建,四行和两行就像您的一样。

在运行了您在这里显示的确切代码之后,它运行起来没有问题。为了了解它是否与您使用的范围有关,我做了一些重写:

代码语言:javascript
复制
[TestMethod]
public void TestInsertFile()
{
    Application word = new Microsoft.Office.Interop.Word.Application();

    word.Visible = true;

    Document doc = word.Documents.Open(@"c:\temp\testdoc1.docx");

    Range rng = word.ActiveDocument.Bookmarks.get_Item("testbookmark").Range;

    object count = 1;
    object back = -1;

    rng.Move(Unit: Word.WdUnits.wdCharacter, Count: ref back);
    rng.Paragraphs.Add();
    rng.Move(Unit: Word.WdUnits.wdParagraph, Count: ref count);

    object obj = rng as object;

    Word.ContentControl wcc = word.ActiveDocument.ContentControls.Add(WdContentControlType.wdContentControlRichText, ref obj);
    wcc.LockContentControl = true;
    wcc.SetPlaceholderText(null, null, " ");
    wcc.Tag = @"c:\temp\testdoc2.docx";

    wcc.Range.InsertFile(wcc.Tag);
}

因此,您的问题似乎与代码无关。查看源文档或目标文档中是否有可能影响行为的其他内容。尝试在我的TestMethod中运行这些代码,看看孤立的代码是否在您的旁边执行相同的操作。

下面是上面代码的结果:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35983316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档