使用 C# 自動創建和格式化 Word 表格_Word

在現代辦公自動化中,Word 文檔依然是信息呈現和數據輸出的重要載體。無論是月度報表、客户合同,還是內部彙總文檔,表格都是不可或缺的元素。手動創建表格不僅效率低,而且容易出錯。藉助 C# 編程,我們可以輕鬆實現 Word 表格的自動生成、格式化以及複雜操作。

本文將系統介紹如何使用 Free Spire.Doc for .NET 處理 Word 表格,包括表格樣式設置、動態添加刪除行列、以及單元格內嵌套表格等操作。通過這些技巧,您可以快速生成符合業務需求的高質量文檔。

安裝 Free Spire.Doc for .NET:Install-Package FreeSpire.Doc


1. C# 操作 Word 表格的對象模型

在操作表格之前,需要理解 Word 文檔的對象結構:

  • Document:文檔整體對象
  • Section:文檔的分節,每個 Section 可包含多個段落或表格
  • Table:表格對象
  • TableRow:表格行
  • TableCell:表格單元格
  • Paragraph:單元格或正文中的段落
  • TextRange:段落中實際文本
  • ParagraphStyle:段落樣式,統一管理字體、字號、對齊方式等

掌握這些對象的層級關係,可以更靈活地控制表格內容與樣式。


2. 創建並格式化表格

在很多業務場景中,表格不僅需要展示數據,還要美觀、清晰。下面示例展示如何創建一個銷售數據表,設置列寬、行高、背景色和字體樣式。

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing;

public class WordTableDemo
{
    public static void CreateFormattedTable(string filePath)
    {
        Document doc = new Document();
        Section sec = doc.AddSection();

        // 添加標題
        Paragraph title = sec.AddParagraph();
        TextRange tr = title.AppendText("2025年度產品銷售統計");
        tr.CharacterFormat.FontName = "Yu Gothic UI";
        tr.CharacterFormat.FontSize = 18;
        tr.CharacterFormat.Bold = true;
        title.Format.HorizontalAlignment = HorizontalAlignment.Center;

        sec.AddParagraph().AppendText("\n"); // 間距

        // 創建表格
        Table table = sec.AddTable();
        table.ResetCells(5, 4); // 5行4列
        table.TableFormat.Borders.BorderType = BorderStyle.Single;
        table.TableFormat.Borders.LineWidth = 1f;
        table.TableFormat.Borders.Color = Color.DarkGray;

        // 設置列寬
        int[] colWidths = { 80, 200, 100, 120 };
        foreach (TableRow row in table.Rows)
        {
            for (int i = 0; i < colWidths.Length; i++)
                row.Cells[i].SetCellWidth(colWidths[i], CellWidthType.Point);
        }

        // 表頭樣式
        ParagraphStyle headerStyle = doc.AddParagraphStyle("headerStyle");
        headerStyle.CharacterFormat.Bold = true;
        headerStyle.CharacterFormat.FontName = "Yu Gothic UI";
        headerStyle.CharacterFormat.FontSize = 13;
        headerStyle.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center;

        string[] headers = { "產品編號", "產品名稱", "銷售數量", "銷售金額" };
        for (int i = 0; i < headers.Length; i++)
        {
            TableCell cell = table.Rows[0].Cells[i];
            cell.CellFormat.BackColor = Color.LightSteelBlue;
            cell.CellFormat.VerticalAlignment = VerticalAlignment.Middle;
            Paragraph p = cell.AddParagraph();
            p.AppendText(headers[i]);
            p.ApplyStyle(headerStyle.Name);
        }

        // 數據樣式
        ParagraphStyle dataStyle = doc.AddParagraphStyle("dataStyle");
        dataStyle.CharacterFormat.FontName = "Yu Gothic UI";
        dataStyle.CharacterFormat.FontSize = 12;
        dataStyle.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center;

        string[,] data = {
            { "A101", "超薄筆記本", "120", "180000" },
            { "B202", "智能手機", "450", "540000" },
            { "C303", "無線耳機", "300", "90000" },
            { "D404", "智能手錶", "200", "80000" }
        };

        for (int r = 0; r < data.GetLength(0); r++)
        {
            for (int c = 0; c < data.GetLength(1); c++)
            {
                TableCell cell = table.Rows[r + 1].Cells[c];
                Paragraph p = cell.AddParagraph();
                p.AppendText(data[r, c]);
                p.ApplyStyle(dataStyle.Name);
                cell.CellFormat.VerticalAlignment = VerticalAlignment.Middle;
            }
        }

        doc.SaveToFile(filePath, FileFormat.Docx);
        Console.WriteLine($"文檔已生成:{filePath}");
    }
}

此示例展示瞭如何創建格式化表格、設置列寬、行高和背景色,同時應用統一字體樣式。

生成結果預覽

使用 C# 自動創建和格式化 Word 表格_Word_02


3. 動態添加與刪除行列

實際業務中,表格行列數量可能不固定,需要根據數據動態調整:

// 添加新行
public static void AddRow(Table table, string[] rowData)
{
    TableRow newRow = table.AddRow();
    newRow.Height = 22;
    newRow.HeightType = TableRowHeightType.Auto;

    for (int i = 0; i < rowData.Length; i++)
    {
        TableCell cell = newRow.Cells[i];
        Paragraph p = cell.AddParagraph();
        p.AppendText(rowData[i]);
        p.Format.HorizontalAlignment = HorizontalAlignment.Center;
        cell.CellFormat.VerticalAlignment = VerticalAlignment.Middle;
    }
}

// 刪除行
public static void RemoveRow(Table table, int rowIndex)
{
    if (rowIndex >= 0 && rowIndex < table.Rows.Count)
        table.Rows.RemoveAt(rowIndex);
}

// 添加列
public static void AddColumn(Table table, int colIndex, string[] colData)
{
    for (int r = 0; r < table.Rows.Count; r++)
    {
        TableCell newCell = new TableCell(table.Document);
        table.Rows[r].Cells.Insert(colIndex, newCell);
        Paragraph p = newCell.AddParagraph();
        if (r < colData.Length) p.AppendText(colData[r]);
        p.Format.HorizontalAlignment = HorizontalAlignment.Center;
        newCell.CellFormat.VerticalAlignment = VerticalAlignment.Middle;
    }
}

// 刪除列
public static void RemoveColumn(Table table, int colIndex)
{
    for (int r = 0; r < table.Rows.Count; r++)
    {
        if (colIndex >= 0 && colIndex < table.Rows[r].Cells.Count)
            table.Rows[r].Cells.RemoveAt(colIndex);
    }
}

使用這些方法,表格可以根據實際數據動態擴展或縮減,非常適合報表和數據彙總場景。


4. 單元格內嵌套表格

在合同條款、問卷或複雜佈局中,可能需要在一個單元格內部嵌入表格:

using Spire.Doc;
using Spire.Doc.Documents;


public class WordTableDemo
{
    public static void InsertNestedTable(string filePath)
    {
        Document doc = new Document();
        Section sec = doc.AddSection();

        sec.AddParagraph().AppendText("嵌套表格示例").CharacterFormat.FontSize = 16;
        sec.AddParagraph().AppendText("\n");

        Table outer = sec.AddTable();
        outer.ResetCells(2, 2);
        outer.TableFormat.Borders.BorderType = BorderStyle.Single;

        outer.Rows[0].Cells[0].AddParagraph().AppendText("外表格 (0,0)");

        TableCell nestedCell = outer.Rows[0].Cells[1];
        nestedCell.AddParagraph().AppendText("內部表格如下:");

        Table inner = nestedCell.AddTable();
        inner.ResetCells(3, 2);
        inner.TableFormat.Borders.BorderType = BorderStyle.Dot;

        string[,] innerData = {
        { "編號", "名稱" },
        { "001", "筆記本" },
        { "002", "手機" }
    };

        for (int r = 0; r < innerData.GetLength(0); r++)
        {
            for (int c = 0; c < innerData.GetLength(1); c++)
            {
                TableCell cell = inner.Rows[r].Cells[c];
                cell.AddParagraph().AppendText(innerData[r, c]);
                cell.CellFormat.VerticalAlignment = VerticalAlignment.Middle;
                cell.Paragraphs[0].Format.HorizontalAlignment = HorizontalAlignment.Center;
            }
        }

        outer.Rows[1].Cells[0].AddParagraph().AppendText("外表格 (1,0)");
        outer.Rows[1].Cells[1].AddParagraph().AppendText("外表格 (1,1)");

        doc.SaveToFile(filePath, FileFormat.Docx);
        Console.WriteLine($"嵌套表格文檔已生成:{filePath}");
    }

    static void Main(string[] args)
    {
        InsertNestedTable("NestedTable.docx");
    }
}

嵌套表格能夠在一個單元格內呈現多層信息,例如條款編號+説明內容,或分區統計數據。

生成結果預覽

使用 C# 自動創建和格式化 Word 表格_嵌套_03


5. 總結

本文展示了使用 C# 與 Free Spire.Doc for .NET 操作 Word 表格的多種技巧:

  1. 創建格式化表格,並統一設置列寬、行高、背景色和字體樣式
  2. 動態添加或刪除行列,適配數據量變化
  3. 在單元格內嵌套表格,實現更靈活的文檔佈局

通過這些方法,開發者可以輕鬆實現高質量的 Word 報表、合同或彙總文檔。結合 Free Spire.Doc 的其他 API,還可擴展圖片插入、分頁控制和 PDF 導出等功能,使文檔生成更智能化。