c#为word添加条码

条形码上显示的字符串是“S-102909211000001-12”。

在C#中如何完成以上操作?

首先应当在项目中添加Microsoft.Office.Interop.Word引用,再添加对Office安装目录下的2052目录中的msbcode9.ocx的引用,后者在解决方案资源管理器中显示为BARCODELib,需要使用此命名空间对条形码的属性进行设置。

然后使用以下代码完成向Word文档中添加一个条形码:



1 private void btnAddBarCodeControl_Click(object sender, EventArgs e)
2 {
3
4 Microsoft.Office.Interop.Word.Application CurWord = null;
5 Microsoft.Office.Interop.Word.Document CurDocument = null;
6 object mValue = System.Reflection.Missing.Value;
7
8 object objFileName = Application.StartupPath + "/testdoc.doc";
9
10 object objReadOnly = false;
11
12 CurWord = new Microsoft.Office.Interop.Word.Application();
13
14 CurDocument = CurWord.Documents.Open(
15 ref objFileName
16 , ref mValue
17 , ref objReadOnly
18 , ref mValue
19 , ref mValue
20 , ref mValue
21 , ref mValue
22 , ref mValue
23 , ref mValue
24 , ref mValue
25 , ref mValue
26 , ref mValue
27 , ref mValue
28 , ref mValue
29 , ref mValue
30 , ref mValue
31 );
32
33 object objOleControlType = "BARCODE.BarCodeCtrl.1";
34
35 object objLeft = 20;
36 object objTop = 20;
37 object objWidth = 200;
38 object objHeight = 50;
39
40 object comControl = CurDocument.Shapes.AddOLEControl(
41 ref objOleControlType
42 , ref objLeft
43 , ref objTop
44 , ref objWidth
45 , ref objHeight
46 , ref mValue
47 ).OLEFormat.Object;
48
49
50 ((BARCODELib.IBarCodeCtrl)comControl).Value = "S-102909211000001-12";
51
52 ((BARCODELib.IBarCodeCtrl)comControl).Style = 7;
53
54 CurDocument.Save();
55
56 }




上面的C#代码是由完成同样功能的VBA代码转换过来的,其它地方可能并无什么难理解之处,有两个地方需要说明一下——

1、AddOLEControl方法的第一个参数ClassType如何确定?语法提示告诉我们这是ActiveX控件的编程标识符,其实,这个编程标识符可以在VBA for Word编程参考资料中找到,文档主题即为“OLE 编程标识符”,常用控件的编程标识符列表如下:



要创建此控件 使用此标识符
复选框 Forms.CheckBox.1
组合框 https://www.360docs.net/doc/d13679120.html,boBox.1
命令

按钮 https://www.360docs.net/doc/d13679120.html,mandButton.1
框架 Forms.Frame.1
图像 Forms.Image.1
标签 https://www.360docs.net/doc/d13679120.html,bel.1
列表框 Forms.ListBox.1
多页控件 Forms.MultiPage.1
选项按钮 Forms.OptionButton.1
滚动条 Forms.ScrollBar.1
数值调节钮 Forms.SpinButton.1
TabStrip Forms.TabStrip.1
文本框 Forms.TextBox.1
切换按钮 Forms.ToggleButton.1



当然,对于条形码控件来说,它的编程标识符要特殊一些,没有办法,只能找找VBA方法中处理时使用的ClassType名称了。

2、comControl的类型是如何确定的?如果不确定它的类型,我们是无法设置该控件的Value和Style属性的。

确定该COM对象类型的过程是这样的,添加对Microsoft.VisualBasic的引用,监视察看https://www.360docs.net/doc/d13679120.html,rmation.TypeName(comControl)的值(在设置OLE控件属性之前),可以得到字符串"IBarCodeCtrl"(原理可以参照“获取System.__ComObject的真正类型”,不再赘述),在BARCODELib命名空间下恰好有名称为IBarCodeCtrl的接口。

如果要添加的是Office的常用控件,而不是条形码控件,方法类似。以添加一个文本框为例,objOleControlType应为"Forms.TextBox.1",察看https://www.360docs.net/doc/d13679120.html,rmation.TypeName(comControl)的值为IMdeText,要使用这个接口,应该添加引用Microsoft.Vbe.Interop.Forms,这个命名空间下包含了Office常用控件的接口,可以使用下面的语句为该文本框设置初始显示的字符串:



1 ((Microsoft.Vbe.Interop.Forms.IMdcText)comControl).Text = "inital value";

相关主题
相关文档
最新文档