C#中操作Word(6)—— 如何向Word中插入图片

一、Word对象模型的重叠性分析

        本文主要介绍通过书签Bookmark向Word文档中插入图片的方法。在此之前我们先简单讨论下Word对象模型的重叠性。如果你对Word对象模型还不熟悉,请参考本专栏第一篇博文。相信你通过前几篇文章也有了解到,Word中五种对象:Applicatin、Document、Selection、Range和Bookmark似乎是重叠在一起的,什么意思呢?

       比如说我们可以通过Applicatin.Documents属性的Add接口获取到Documents对象:

   Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
   Document doc= Document doc = app.Documents.Add("D:\\Test.docx");
      而通过Document的Applicatin属性我们又可以反过来获取到Applicatin对象。
   Application app=doc.Application;
      我们可以通过Bookmark对象获取到Range对象:
   foreach (Bookmark bk in doc.Bookmarks)
   {
     Range range = bk.Range;
    }
       也可以通过Range对象获取到Bookmark:
    foreach (Bookmark bk in range.Bookmarks)
   {
    }

        几乎每种模型对象和其他兑现之间都存在这种复杂的包含关系。其实这种包含关系从下面这幅word模型图中便可看出端倪。


(1) Application 作为整个模型树的树根,在内存中又是单例的,所以可以通过其他四种对象中任意一种来获取到。
(2) Document和Selection是Application 的直接关联,可以通过Application 来获取Document和Selection对象。
(3) 而Bookmarks、Document、Range作为Selection的直接关联,也可以通过 Selection对象来获取到。
(4) 以此类推,这种获取的规律就是:参照这颗模型树,每个上级对象都能获取其直接下级对象。而反过来,每个下级对象也几乎可以获取其直接上级对象。但是Selection比较特殊。
(5) Selection对象只能通过Application 对象来获取,通过其他任何对象都无法获取到。

        关于第5点,通过Selection的实际意义我们可以解释清楚。
        Selection表示处于鼠标进行选中状态的内容范围,如果鼠标没有选中,它表示目前鼠标所在的位置,对于整个App来说它也是唯一的。以Range来举例来说明这个问题:           我们知道Range对象在文档中也是可以多个出现的,也就是说一个app中会包含很多个Range对象,这些Range对象可能在Selection的范围内,也可能没在Selection的范围内。而对于没在Selection范围内的Range,它是无从知道目前Selection的位置的,所以不能从Range反向得到Selection也算合理。对于Bookmarks和Document也是类似,这就是无法从上述三种对象得到Selection对象的原因。

二、利用Selection对象插入图片。

        OK,介绍完了Word模型对象的重叠属性,我们进入正题,来讲解下在word中怎么插入图片。插入图片时我们需要用到Selection的一个属性InlineShapes,这也是为什么我们在开篇引出Selection获取方法的原因。想要获取Selection,必须先获取Application 对象。
        下面,我将演示通过Bookmark插入图片的方法。

2.1 编写word模板

        首先,我们编写一个word模板,并插入好书签:



        在name书签里我们需要填写自己的姓名,然后在picture书签里,我们要插入头像。

2.2 加载模板文件

        加载模板文件和上一节的方法相同,这里不再赘述,请直接参考下面的代码:
private void button1_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
Document doc = app.Documents.Add("D:\\Test.docx");
app=doc.Application;
doc.ActiveWindow.Visible = true;
foreach (Bookmark bk in doc.Bookmarks)
{
if (bk.Name == "name")
{
bk.Range.Text = "Hyman";
}
else if (bk.Name == "picture")
{
bk.Select();
Selection sel = app.Selection;
sel.InlineShapes.AddPicture("D:\\Test.jpg");
}

}

doc.SaveAs("E:\\Test.docx");
app.Quit();
}

        这里唯一需要解释下的是下面这两句:
    bk.Select();
    Selection sel = app.Selection;
        bk.Select();作用是把鼠标焦点定位到当前的书签出,然后通过app.Selection获取该焦点的位置。程序执行完成后生成的word文档内容如下,我们成功的把图片插入进去:


Github位置:

https://github.com/HymanLiuTS/OfficeTestByC-

克隆本项目:

git clone git@github.com:HymanLiuTS/OfficeTestByC-.git

获取本文源代码:

git checkout L06




  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C#,在Word文档插入图片的方法是使用Microsoft.Office.Interop.Word的对象模型来实现。首先,我们需要加载Word模板文件,然后通过书签(Bookmark)定位到需要插入图片的位置,最后使用Selection对象的InlineShapes属性来添加图片。 以下是一个示例代码来演示在Word插入图片的方法: ```csharp using Microsoft.Office.Interop.Word; // 创建Word应用程序对象 Application app = new Application(); // 打开模板文件 Document doc = app.Documents.Open("D:\\Test.docx"); // 设置Word窗口可见 app.Visible = true; // 遍历所有书签 foreach (Bookmark bookmark in doc.Bookmarks) { if (bookmark.Name == "picture") { // 定位到书签位置 bookmark.Select(); // 获取当前选位置的Selection对象 Selection selection = app.Selection; // 使用InlineShapes属性添加图片 selection.InlineShapes.AddPicture("D:\\Test.jpg"); } } // 保存文档 doc.SaveAs("E:\\Test.docx"); // 关闭Word应用程序 app.Quit(); ``` 在上述代码,我们首先创建了一个Word应用程序对象,并打开了模板文件。然后,我们遍历所有的书签,当找到名为"picture"的书签时,我们使用Select方法将鼠标焦点定位到该书签位置,并通过app.Selection获取当前选位置的Selection对象。最后,我们使用InlineShapes属性的AddPicture方法来添加图片。 请注意,上述代码仅为示例,实际使用时可能需要根据具体情况进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值