C#向Word文档中插入条形码 您所在的位置:网站首页 word怎么设置条形码颜色深点 C#向Word文档中插入条形码

C#向Word文档中插入条形码

2024-02-29 06:04| 来源: 网络整理| 查看: 265

在Word中可以通过下面的方法手动添加一个条形码:使用菜单“视图”——“工具栏”——“控件工具箱”打开控件工具箱,使用控件工具箱右下角的最后一个按钮“其它控件”,在弹出的列表中选择“Microsoft BarCode Control 9.0”,在文档中新添加的条形码上单击右键,使用邮件菜单“属性”打开属性对话框,设置Value和Style属性值即可显示相应的条形码。

还有另外一种可以添加条形码的方法,使用一些条形码字库,只要输入相应条形码的字符,并选择使用特定的条形码字体即可。

这里讨论的是第一种方法,而且应用的场景是一次性向一个Word文档添加多个条形码,此时手动添加不适用,可以考虑使用VBA完成添加条形码的操作。

在VBA for Word的编程参考资料里很容易找到这样的代码:

 

1  Set  myCB  =  ActiveDocument.Shapes.AddOLEControl(ClassType: = " Forms.CheckBox.1 " ) 2  With  myCB.OLEFormat.Object 3      .Value  =   False 4      .Caption  =   " Check if over 21 " 5  End   With

 

这是向Word文档中添加一个复选框的VBA代码,如果是添加一个条形码对象,代码是这样的:

 

1  Set  myCB  =  ActiveDocument.Shapes.AddOLEControl(ClassType: = " BARCODE.BarCodeCtrl.1 " ) 2  With  myCB.OLEFormat.Object 3      .Value  =   " S-102909211000001-12 " 4      .Style  =   7 5  End   With

 

条形码上显示的字符串是“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组合框Forms.ComboBox.1命令按钮Forms.CommandButton.1框架Forms.Frame.1图像Forms.Image.1标签Forms.Label.1列表框Forms.ListBox.1多页控件Forms.MultiPage.1选项按钮Forms.OptionButton.1滚动条Forms.ScrollBar.1数值调节钮Forms.SpinButton.1TabStripForms.TabStrip.1文本框Forms.TextBox.1切换按钮Forms.ToggleButton.1

 

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

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

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

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

 

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

 

 

 

P.S. 有关C#以COM方式操作Word文档可以参见sharemeteor的一篇随笔:.NET1.1下,使用C#自动生成Word2003文档(通过操作COM组件实现)。

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有