C#向Word文檔中插入條碼

來源:互聯網
上載者:User

在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.1
TabStrip Forms.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組件實現)。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.