Skip to main content

Command Palette

Search for a command to run...

Efficiently Extracting Word Table Data with C#

Published
4 min readView as Markdown

In many enterprise and daily development scenarios, Word documents remain a common carrier for tabular data—whether it’s sales reports, survey results, or project schedules. However, manually copying this data into databases, Excel, or analysis tools is time-consuming and error-prone. This article walks you through a streamlined solution: using C# and the Spire.Doc library to automatically extract Word table data and save it in a usable format (text files, in this case), with clear explanations for beginners and actionable extensions for advanced needs.


Prerequisites: Tools and Setup

Before diving into code, ensure your environment is configured with the following components:

  1. Development IDE: Visual Studio 2022 (or later) is recommended.
  2. .NET Framework: .NET Framework/.NET Core.
  3. Spire.Doc Library: A lightweight, Office-independent library for Word document manipulation. Unlike Microsoft’s Office Interop, it doesn’t require Microsoft Office to be installed on the machine (critical for server environments).

Installing Spire.Doc

The easiest way to add Spire.Doc to your project is via NuGet Package Manager:

  • Open your C# project in Visual Studio.
  • Right-click the project in the Solution Explorer → Select "Manage NuGet Packages".
  • In the "Browse" tab, search for "Spire.Doc" (by E-iceblue) and click "Install".
  • Confirm the license prompt (Spire.Doc also offers a free version (Free Spire.Doc) with limitations).

Step-by-Step Implementation: Extracting Word Tables

The key to reliable table extraction lies in understanding Word’s document structure. A Word file is organized hierarchically: Document → Sections → Tables → Rows → Cells. We’ll traverse this structure to pull data cell by cell.

Step 1: Define the Core Workflow

The logic follows four simple stages:

  1. Load the target Word document into a Document object.
  2. Traverse each section in the document (sections separate parts of a Word file with different formatting, e.g., landscape/portrait pages).
  3. For each section, iterate over its tables, then each row in the table, and finally each cell.
  4. Extract text from cells (handling multi-paragraph content) and save the compiled data to a text file.

Step 2: Full Working Code

This code includes error handling (e.g., missing files) and clear comments to guide you. Create a new console app and replace the default code with this:

using Spire.Doc;
using Spire.Doc.Collections;
using Spire.Doc.Interface;
using System.IO;
using System.Text;

namespace ExtractWordTable
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // Create a document object
            Document doc = new Document();
            // Load the Word document
            doc.LoadFromFile("Tables.docx");

            // Traverse all sections in the document
            for (int sectionIndex = 0; sectionIndex < doc.Sections.Count; sectionIndex++)
            {
                Section section = doc.Sections[sectionIndex];

                // Get all tables in the current section
                TableCollection tables = section.Tables;

                // Traverse all tables in the current section
                for (int tableIndex = 0; tableIndex < tables.Count; tableIndex++)
                {
                    ITable table = tables[tableIndex];

                    // Used to store all data of the current table
                    string tableData = "";

                    // Traverse all rows in the table
                    for (int rowIndex = 0; rowIndex < table.Rows.Count; rowIndex++)
                    {
                        TableRow row = table.Rows[rowIndex];
                        // Traverse all cells in the row
                        for (int cellIndex = 0; cellIndex < row.Cells.Count; cellIndex++)
                        {
                            TableCell cell = row.Cells[cellIndex];

                            // Extract cell text (a cell may contain multiple paragraphs)
                            string cellText = "";
                            for (int paraIndex = 0; paraIndex < cell.Paragraphs.Count; paraIndex++)
                            {
                                cellText += (cell.Paragraphs[paraIndex].Text.Trim() + " ");
                            }

                            // Splice cell text, separate different cells with tabs
                            tableData += cellText.Trim();
                            if (cellIndex < row.Cells.Count - 1)
                            {
                                tableData += "\t";
                            }
                        }

                        // Wrap line after the end of the row
                        tableData += "\n";
                    }

                    // Save table data to a text file
                    string filePath = Path.Combine("Tables", $"Section{sectionIndex + 1}_Table{tableIndex + 1}.txt");
                    File.WriteAllText(filePath, tableData, Encoding.UTF8);
                }
            }

            doc.Close();
        }
    }
}

Advanced Extensions

Once you master the basic extraction, try these enhancements to fit real-world needs:

1. Export to Excel Directly

Instead of saving to text files, use the Spire.XLS library (from the same vendor) to write data directly to Excel. Add a reference to Spire.XLS via NuGet, then replace the file-saving logic with code to create an Excel worksheet and populate cells.

2. Batch Process Multiple Word Files

Modify the code to scan a folder for all .docx files:

string[] wordFiles = Directory.GetFiles("PathToYourFolder", "*.docx");
foreach (string file in wordFiles)
{
    // Reuse the extraction logic for each file
    doc.LoadFromFile(file);
    // ...
}

3. Clean Up Special Characters

Some Word tables include special characters (e.g., em dashes, bullet points). Add a helper method to remove or replace them:

private static string CleanText(string text)
{
    // Replace em dashes with regular dashes, remove bullet points
    return text.Replace("—", "-").Replace("•", "").Replace("\r\n", " ");
}

Why This Approach Works

Compared to other methods, using Spire.Doc offers two key advantages:

  1. No Office Dependency: The code runs on servers or machines without Microsoft Office installed—critical for enterprise automation.
  2. Speed and Reliability: Spire.Doc parses Word files directly (without launching an Office app in the background), making it faster and less prone to crashes.

By following this guide, you can automate Word table extraction in minutes—saving hours of manual work and reducing errors. Whether you’re building a data pipeline or a simple desktop tool, this C# solution is flexible enough to scale to your needs.

More from this blog

coding

19 posts