首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 操作 Word 2007 文件:使用 Microsoft.Office.Interop.Word 完整範例

     編輯:關於C#

前置準備

  1. 安裝 Microsoft Office(含 Word)
  2. 專案加入參考:Microsoft.Office.Interop.Word(COM 標籤)
  3. 引用命名空間:using Word = Microsoft.Office.Interop.Word;

核心操作類別

類別用途
ApplicationWord 應用程式實例,控制啟動、結束、可見性
Document單一 .doc/.docx 文件,提供內容編輯、儲存、列印
Range/Selection文件內容區域/選取範圍,支援文字插入、格式設定
Paragraphs段落集合,適合逐段寫入

完整範例:建立、寫入、開啟、修改字型、儲存

using System;
using System.IO;
using System.Reflection;
using System.Windows.Forms;
using Word = Microsoft.Office.Interop.Word;

namespace WordAutomationDemo
{
    public partial class Form1 : Form
    {
        private Word.Application _app;
        private Word.Document _doc;
        private object _missing = Missing.Value;

        public Form1() { InitializeComponent(); }

        private void btnCreate_Click(object sender, EventArgs e)
        {
            string path = Path.Combine(Application.StartupPath, "test.doc");
            if (File.Exists(path)) File.Delete(path);

            _app = new Word.Application();
            _doc = _app.Documents.Add(ref _missing, ref _missing, ref _missing, ref _missing);

            // 寫入內容
            _doc.Paragraphs.Last.Range.Text = "你好\r\n";
            _doc.Paragraphs.Last.Range.Text = "這是測試程式";

            // 儲存並關閉
            _doc.SaveAs2(ref path, 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.Close(ref _missing, ref _missing, ref _missing);
            _app.Quit(ref _missing, ref _missing, ref _missing);

            rtbLog.Text = path + "\r\n建立成功";
        }

        private void btnOpenModify_Click(object sender, EventArgs e)
        {
            if (fontDialog1.ShowDialog() != DialogResult.OK) return;

            object path = @"D:\asp.docx";
            _app = new Word.Application();
            _doc = _app.Documents.Open(ref path, 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.Content.Font.Size = fontDialog1.Font.Size;
            _doc.Content.Font.Name = fontDialog1.Font.Name;

            _doc.Save();
            rtbLog.Text = _doc.Content.Text;

            _doc.Close(ref _missing, ref _missing, ref _missing);
            _app.Quit(ref _missing, ref _missing, ref _missing);
        }

        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            // 確保釋放 COM 物件
            if (_doc != null) Marshal.ReleaseComObject(_doc);
            if (_app != null) Marshal.ReleaseComObject(_app);
            base.OnFormClosing(e);
        }
    }
}

重要最佳實務

  • 一定要釋放 COM 物件:使用 Marshal.ReleaseComObject,否則 Word 進程會殘留在背景。
  • 避免在迴圈中逐字操作:改用 Range 批次寫入,效能差異可達百倍。
  • 伺服器端自動化風險:Microsoft 不建議在無人值守的伺服器上使用 Interop。生產環境請改用 Open XML SDK(DocumentFormat.OpenXml)或第三方庫(NPOI、Aspose.Words)。
  • 選用參數:C# 4.0+ 可用 ref missing 簡化呼叫;舊版需逐一傳遞 ref missing。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved