最近在做一個項目,其中有一個技術性的難題:“提取Word指定表格中的指定單元格的數據”。對於像我這樣一個僅僅對於C#語法略有了解的學生來說確實讓我感到有些力不從心,這真是一個非常非常大的挑戰。
登錄google,我檢索了相當多的文章,從多的500多行的代碼到少的不到100行的代碼。這些提取數據的方法基本上就那麼幾種,這些人放在博客上基本上都是你copy我的,我copy你的。現在的有些作者很不負責,拿來一段代碼就放上去了。通覽這些代碼,你會發現有些地方居然用到了作者自定義的類;然而,作者卻沒有提供給你這些類的實現方法。這樣的作者很是氣人!還有些作者,在自己的博客上狂貼了幾百行的代碼,外加一個標題就完了。代碼是什麼意思,程序整個的實現流程是什麼樣子的,說都不說。這些代碼很多,誰都懶得去看。精辟的文章很少,我百裡挑一,經過幾個星期的查找和篩選,終於整理出來一套可行的方案。本文通過一個簡單的例子,來揭示如何從Word的表格提取指定單元格數據的方法。
准備工作:
新建Word文檔doc1.doc。繪制表格,並且在表格中插入數據,如下表:
Id Name 1 Wulei 2 Jack界面設計及程序運行過程界面截圖:
說明:通過打開按鈕打開文件(將文件路徑顯示在TextBox控件中)
打開剛剛建立的文件doc1.doc
讀取第二行第1列數據,顯示在TextBox控件中。
方法步驟:
1.在引用處添加引用,引用Microsoft.Office.Interop.Word;
2.使用命名空間Microsoft.Office.Interop.Word和System.Reflection;
3.編寫打開按鈕代碼和讀取Word表格按鈕事件代碼。
因為主要部分在讀取Word表格按鈕事件代碼,因此以下將分享最重要最核心的代碼:
1 private void ReadTable_Click(object sender, EventArgs e)
2 {
3 ApplicationClass cls = null;
4 Document doc = null;
5
6 Table table = null;
7 object missing = Missing.Value;
8 int rowIndex = 2, colIndex = 1;
9
10 object path = fileName.Text;
11 cls = new ApplicationClass();
12
13 try
14 {
15 doc = cls.Documents.Open
16 (ref path, ref missing, ref missing, ref missing,
17 ref missing, ref missing, ref missing, ref missing,
18 ref missing, ref missing, ref missing, ref missing,
19 ref missing, ref missing,ref missing,ref missing);
20 table = doc.Tables[1];
21 string text = table.Cell(rowIndex,colIndex).Range.Text.ToString();
22 text=text.Substring(0, text.Length - 2); //去除尾部的mark
23 textContent.Text = text;
24 //textContent.Text =
25 MessageBox.Show("Congradulations");
26 }
27 catch (Exception ex)
28 {
29 MessageBox.Show(ex.Message);
30 }
31 finally
32 {
33 if (doc != null)
34 doc.Close(ref missing, ref missing, ref missing);
35 cls.Quit(ref missing, ref missing, ref missing);
36 }
37 }
代碼比較簡單,相信大家都能看明白。