在 .NET 開發中,經常需要對 Word 文檔進行自動化處理,其中刪除段落是常見需求(如清理空白段落、刪除指定內容段落等)。Free Spire.Doc for .NET 是一款免費的 Word 文檔操作組件,無需依賴 Microsoft Word 環境即可實現 Word 文檔的創建、編輯和修改。本文將詳細介紹如何使用該組件實現多種場景下的 Word 段落刪除。

一、環境準備

推薦通過 NuGet 包管理器 快速安裝 Free Spire.Doc for .NET:

  • 打開 Visual Studio 項目,右鍵點擊項目 → 選擇「管理 NuGet 程序包」;
  • 在搜索框中輸入「Free Spire.Doc」,找到對應包後點擊「安裝」;
  • 安裝完成後,在代碼中引用命名空間即可使用:
using Spire.Doc;
using Spire.Doc.Documents;

二、核心場景:刪除 Word 段落

Free Spire.Doc 中,Word 文檔的結構為「DocumentSectionParagraph」:

  • 一個 Document 可包含多個 Section(章節);
  • 一個 Section 可包含多個 Paragraph(段落);
  • 段落索引從 0 開始(與 C# 集合索引規則一致)。

以下是 3 種常見的段落刪除場景,均提供完整可運行代碼。

場景 1:刪除指定索引的段落

適用於已知要刪除段落的位置(如刪除第 2 段、最後一段)。

實現步驟:

  1. 創建 Document 實例,加載 Word 文檔;
  2. 獲取目標章節(通常為第 1 個章節 Sections[0]);
  3. 通過段落索引調用 Paragraphs.RemoveAt(index) 方法刪除段落;
  4. 保存修改後的文檔。

完整代碼:

using System;
using Spire.Doc;

namespace WordParagraphDeletion
{
    class Program
    {
        static void Main(string[] args)
        {
             // 1. 加載 Word 文檔(支持 .doc 和 .docx 格式)
             string inputPath = @"C:\Test\Source.docx"; // 源文檔路徑
             Document doc = new Document();
             doc.LoadFromFile(inputPath);

             // 2. 獲取第 1 個章節(若文檔有多個章節,需指定對應索引)
             Section section = doc.Sections[0];

             // 3. 刪除指定索引的段落(示例:刪除第 2 段,索引為 1)
             int targetIndex = 1; // 段落索引從 0 開始
             section.Paragraphs.RemoveAt(targetIndex);

             // 4. 保存修改後的文檔
             string outputPath = @"C:\Test\Result_DeleteByIndex.docx";
             doc.SaveToFile(outputPath, FileFormat.Docx2016);
             doc.Close(); // 釋放資源           
        }
    }
}

場景 2:刪除所有空白段落

適用於清理文檔中的空行(包括純空白字符、製表符、換行符組成的段落)。

關鍵説明:

  • 空白段落判斷:paragraph.Text.Trim() == string.Empty(剔除首尾空白字符後為空);
  • 遍歷刪除時需 反向遍歷(從最後一段往前刪),避免因刪除元素導致索引錯位(正向遍歷會漏刪)。

完整代碼:

using System;
using Spire.Doc;

namespace WordParagraphDeletion
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 加載文檔
            string inputPath = @"C:\Test\Source.docx";
            Document doc = new Document();
            doc.LoadFromFile(inputPath);

            // 2. 遍歷段落
            foreach (Section section in doc.Sections)
            {
                for (int i = 0; i < section.Body.ChildObjects.Count; i++)
                {
                    if (section.Body.ChildObjects[i].DocumentObjectType == DocumentObjectType.Paragraph)
                    {
                        // 3. 判斷是否為空白段落(剔除首尾空白字符)
                        if (String.IsNullOrEmpty((section.Body.ChildObjects[i] as Paragraph).Text.Trim()))
                        {
                            // 4. 刪除空白段落
                            section.Body.ChildObjects.Remove(section.Body.ChildObjects[i]);
                            i--;
                        }
                    }
                }
            }

            // 5. 保存文檔
            string outputPath = @"C:\Test\Result_DeleteBlankParagraphs.docx";
            doc.SaveToFile(outputPath, FileFormat.Docx2016);
            doc.Close();            
        }
    }
}

場景 3:刪除文檔中所有段落

適用於清空文檔內容(僅保留空文檔結構)。

實現步驟:

  • 直接調用 Paragraphs.Clear() 方法刪除章節下所有段落;
  • 若文檔有多個章節,需遍歷所有章節執行清空。

完整代碼:

using System;
using Spire.Doc;

namespace WordParagraphDeletion
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 加載文檔
            string inputPath = @"C:\Test\Source.docx";
            Document doc = new Document();
            doc.LoadFromFile(inputPath);

                // 2. 遍歷所有章節,刪除每個章節的所有段落
            foreach (Section section in doc.Sections)
            {
                section.Paragraphs.Clear();
             }

            // 3. 保存文檔
            string outputPath = @"C:\Test\Result_DeleteAllParagraphs.docx";
            doc.SaveToFile(outputPath, FileFormat.Docx2016);
            doc.Close();
        }
    }
}

三、注意事項

  1. 免費版限制:Free Spire.Doc 免費版支持處理最多 500 個段落的文檔,適用於個人或小型項目。
  2. 資源釋放:操作完成後需調用 doc.Close() 釋放文檔資源,或使用 using 語句自動釋放:
using (Document doc = new Document())
{
    doc.LoadFromFile(inputPath);
    // 段落操作...
    doc.SaveToFile(outputPath);
} // 自動釋放資源

3. 索引問題:段落索引從 0 開始,刪除段落時需避免索引越界(可通過 Paragraphs.Count 判斷範圍)。

四、總結

本文通過 Free Spire.Doc for .NET 實現了 3 種常見的 Word 段落刪除場景,涵蓋指定索引、空白段落、及全量刪除。該組件 API 簡潔易用,無需依賴 Word 環境,適合 .NET 開發者快速實現 Word 文檔自動化處理。根據實際需求選擇對應的刪除方式,即可高效完成段落清理工作。