1. 程式人生 > >能夠按頁號提取word文件文字內容的小程式,由C#實現

能夠按頁號提取word文件文字內容的小程式,由C#實現

在以前做過的一個C#專案中,當時有個需求就是按頁提取word文件的內容,後來這個需求用不到了,但是從中間摸索出來了一些方法。現在作出的這個程式,對於.doc、.docx、格式word檔案,基本都上能夠讀取,也碰到過特殊檔案不能讀取的情況,機率很小。

要想操作word文件,在C#中需要引入 Microsoft.Office.Interop.Word.dll, 這個在vs2010中新增引用時直接就就可以找得到,本程式中使用的版本是14.0.0.0.。

直接使用會報錯誤 無法嵌入互操作型別

將dll檔案的屬性 “互操作型別”改為false即可解決錯誤。

程式程式碼如下:

 1
/// <summary> 2 /// 按頁號得到word檔案的內容 3 /// </summary> 4 /// <param name="filepath">檔案路徑</param> 5 /// <param name="pageNum">頁號</param> 6 public string getWordContentByPage(string filepath, int pageNum) 7 { 8 9 FileInfo f = new
FileInfo(filepath); 10 if (!f.Exists) 11 { 12 return null; 13 } 14 string file_name = f.Name; 15 string file_path = f.FullName; 16 int pageCount = 0; 17 18 Microsoft.Office.Interop.Word.Document doc = null
; 19 20 Microsoft.Office.Interop.Word.ApplicationClass app = new Microsoft.Office.Interop.Word.ApplicationClass(); 21 22 object missing = System.Reflection.Missing.Value; 23 object FileName = file_path; 24 25 object readOnly = true; 26 object isVisible = false; 27 28 try 29 { 30 //開啟文件。為什麼這麼多貌似無用的引數,額,這個我也不知道。。。 31 doc = app.Documents.Open(ref FileName, ref missing, ref readOnly, 32 ref missing, ref missing, ref missing, ref missing, ref missing, 33 ref missing, ref missing, ref missing, ref isVisible, ref missing, 34 ref missing, ref missing, ref missing); 35 36 Microsoft.Office.Interop.Word.WdStatistic stat = Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages; 37 38 pageCount = doc.ComputeStatistics(stat, ref missing);//得到文件總頁數 39 40 object What = Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage; 41 object Which = Microsoft.Office.Interop.Word.WdGoToDirection.wdGoToNext; 42 object page = pageNum + ""; // 頁數 43 44 //ran1 指到要讀頁數頁尾 45 Microsoft.Office.Interop.Word.Range ran1 = doc.GoTo(ref What, ref Which, ref page, ref missing); 46 47 // rand2 為 rand1 的上一頁,如果 rand1是首頁的話也無妨,這樣rand2指向文件頭部第一個插入位置 48 Microsoft.Office.Interop.Word.Range ran2 = ran1.GoToPrevious(Microsoft.Office.Interop.Word.WdGoToItem.wdGoToPage); 49 50 object objStart = ran2.End; //頁首, 51 52 object objEnd = ran1.Start; //頁尾 53 54 //如果是最後頁則只指定從頁首開始讀取,頁尾值忽略 55 if (page.Equals("" + pageCount)) 56 { 57 objStart = ran1.Start; 58 objEnd = missing; 59 } 60 61 Microsoft.Office.Interop.Word.Range r3 = doc.Range(ref objStart, ref objEnd); 62 String content = r3.Text;//此時就已經得到了當前頁面的文字內容 63 64 object saveOption = Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges; 65 //關閉當前操作文件 66 doc.Close(ref saveOption, ref missing, ref missing); 67 app.Quit(ref saveOption, ref missing, ref missing); 68 69 return content; 70 } 71 catch (Exception ex) 72 { 73 throw ex; 74 } 75 }