Word 文件(.doc/.docx)為二進位結構化儲存格式,無法像純文字檔直接用 FileStream 讀取。必須透過 Microsoft Word Object Model(COM 元件)解析內容。
using Word = Microsoft.Office.Interop.Word;
using System.Windows.Forms; // Clipboard
public string ReadWordDocument(string filePath)
{
Word.Application app = new Word.Application();
object missing = System.Reflection.Missing.Value;
object file = filePath;
Word.Document doc = null;
try
{
doc = app.Documents.Open(ref file,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);
// 全選並複製到剪貼簿
doc.ActiveWindow.Selection.WholeStory();
doc.ActiveWindow.Selection.Copy();
// 從剪貼簿取得純文字
IDataObject data = Clipboard.GetDataObject();
return data.GetData(DataFormats.Text).ToString();
}
finally
{
doc?.Close(ref missing, ref missing, ref missing);
app.Quit(ref missing, ref missing, ref missing);
// 釋放 COM 物件
System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
}
}
WholeStory() 選取全文,Copy() 複製至剪貼簿Clipboard.GetDataObject() 取得 IDataObjectDataFormats.Text 擷取純文字內容| 方案 | 優點 | 缺點 |
|---|---|---|
| Open XML SDK | 不需安裝 Office、效能高、支援 .docx | 不支援舊版 .doc、學習曲線較陡 |
| NPOI | 開源、跨平台、支援 .doc/.docx | API 複雜、格式相容性較差 |
| FreeSpire.Doc | 免費版功能完整、API 友善 | 免費版有頁數限制 |