2011-07-24 181 views
0

我正在使用C#Microsoft Word 12.0對象庫從.doc文件讀取數據,然後將這些內容保存到文本文件(這是我的項目需要)。我的.doc文件有一些表格,我需要讀取這些表格中的每一行和每列。 讀取操作成功執行,但該數據包含一些奇怪的字符(如方形的)作爲附加的圖像刪除奇怪的字符?

enter image description here

在這裏,是我使用的代碼:

private void btnRead_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     Microsoft.Office.Interop.Word.ApplicationClass wordObject = new ApplicationClass(); 
     object file = textBox1.Text; //this is the path 
     object nullobject = System.Reflection.Missing.Value; 
     Microsoft.Office.Interop.Word.Document docs = wordObject.Documents.Open 
      (ref file, ref nullobject, ref nullobject, ref nullobject, 
      ref nullobject, ref nullobject, ref nullobject, ref nullobject, 
      ref nullobject, ref nullobject, ref nullobject, ref nullobject, 
      ref nullobject, ref nullobject, ref nullobject, ref nullobject); 

     docs.ActiveWindow.Selection.WholeStory(); 
     docs.ActiveWindow.Selection.Copy(); 
     IDataObject data = Clipboard.GetDataObject(); 
     String allData = ""; 
     for (int t = 1; t < docs.Tables.Count; t++) 
     { 
      Table tbl = docs.Tables[t]; 
      for (int r = 1; r < tbl.Rows.Count; r++) 
      { 
       for (int c = 1; c < 3; c++) 
       { 
        allData += tbl.Cell(r, c).Range.FormattedText.Text.Trim() + Environment.NewLine; 
       } 
      } 
     } 
     txtData.Text = allData; 
     saveTextFile(allData); 

     docs.Close(ref nullobject, ref nullobject, ref nullobject); 
    } 
    catch (Exception j) 
    { 
     MessageBox.Show(j.Message); 
    } 
} 

private void saveTextFile(String data) 
{ 
    try 
    { 
     StreamWriter sw = new StreamWriter(txtOutput.Text.Trim()); 
     sw.WriteLine(data); 
     sw.Flush(); 
     sw.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.StackTrace); 
    } 
} 

有誰有什麼想法,我該如何刪除這些奇怪的字符?

回答

0

嘛,我不是很熟悉的doc格式特別,但是當有一個人物目前認爲是可打印字符集以外的那些箱子(以下簡稱「奇怪的字符」)通常顯示。在這種情況下,因爲有他們的總有兩個在一行的末尾,這可能與換行符文檔(或一些新行相關分析錯誤)的字符,如\ r \ n。 \ r \ n是在許多Windows格式的文檔通常存在,但是否是此以.doc文檔的情況下,超出了我的專業知識。

當然,刪除,如果你很高興本事他們應該是比較瑣碎。您可以簡單地添加一個檢查,只刪除每行的最後兩個字符。這不是漂亮(和我可能會建議反對只是在原則上)但現在看來,這是可行的。