C#中操作Word(6)—— 如何向Word中插入图片
来源:互联网 发布:学历类型 网络教育 编辑:程序博客网 时间:2024/05/05 18:24
一、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
- C#中操作Word(6)—— 如何向Word中插入图片
- C#中操作Word(7)—— 如何向Word中插入表格
- C#操作Word(一)——C#中向Word文档中插入Windows控件
- C#操作Word(一)——C#中向Word文档中插入Windows控件
- C#操作Word(五)——在Word文档中插入图片
- C#中操作Word(8)—— 向Word中插入图表的三种方法(一)
- C#中操作Word(9)—— 向Word中插入图表的三种方法(二)
- C#操作Word(三)——C#向Word文档中写入文字
- 使用VC向word中插入图片
- java/poi读取word,并替换word中的文本内容,向word中插入图片的操作
- java/poi读取word,并替换word中的文本内容,向word中插入图片的操作
- word如何在图片中插入文字
- 请教C#向word中插入C#制作的控件
- 向Word中插入图片,C#编写的生成缩略图程序
- 用VC向Word中插入图片的方法
- word中插入visio图片
- C# asp.net Word中使用书签插入图片导出
- C#操作Word(二)——将Word文档嵌入到WinForm窗体中
- 随着时间的长河向前走
- js数组去重
- In class programming 1
- 洛谷 P1759 通天之潜水
- php判断字符串字母大小写函数实例
- C#中操作Word(6)—— 如何向Word中插入图片
- 洛谷 P1726 上白泽慧音
- 深入认识Oracle Supplemental logging
- linux Redis的安装与部署
- [李景山php]每天TP5-20161219|thinkphp5-softDelete.php
- 关于jsp隐藏输入框传值问题
- Common-io-1.4.jar中MANIFEST.MF文件源码
- 【BZOJ2326】数学作业
- javascript的时间对象