Word 文書内の表には、財務データや調査結果、統計記録など、貴重な情報が含まれていることがよくあります。これらの表に含まれるデータを抽出することで、詳細なデータ分析やトレンドの特定、他のツールやデータベースとのシームレスな統合など、さまざまな目的に活用できるチャンスが広がります。この記事では、C# を使用して、Spire.Doc for .NET を用いて Word 文書から表を抽出する方法を紹介します。
Spire.Doc for .NET をインストールします
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
C# で Word 文書から表を抽出する
Spire.Doc for .NET では、Section.Tables プロパティを使用して、Word 文書のセクションに含まれる表にアクセスできます。このプロパティは、各セクション内の表を表す ITable オブジェクトのコレクションを返します。ITable オブジェクトを取得したら、各行やセルを繰り返し処理し、cell.Paragraphs[index].Text プロパティを使用して各セルのテキスト内容を取得します。表を抽出する手順は以下の通りです:
- Document クラスのオブジェクトを作成し、Document.LoadFromFile() メソッドを使用して Word 文書を読み込みます。
- 文書内のセクションを繰り返し処理し、Section.Tables プロパティを通じて各セクションの表コレクションを取得します。
- 各セクションの表を繰り返し処理し、各表の内容を保存するための文字列オブジェクトを作成します。
- 各表の行と各行内のセルを繰り返し処理し、TableCell.Paragraphs[index].Text プロパティを使用して各セルのテキストを取得し、そのテキストを文字列に追加します。
- 各文字列をテキストファイルに保存します。
- C#
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)
{
// Documentクラスのオブジェクトを作成
Document doc = new Document();
// Word文書をロード
doc.LoadFromFile("Sample.docx");
// 文書内のセクションを反復処理
for (int sectionIndex = 0; sectionIndex < doc.Sections.Count; sectionIndex++)
{
// 現在のセクションを取得
Section section = doc.Sections[sectionIndex];
// セクションのテーブルコレクションを取得
TableCollection tables = section.Tables;
// セクション内のテーブルを反復処理
for (int tableIndex = 0; tableIndex < tables.Count; tableIndex++)
{
// 現在のテーブルを取得
ITable table = tables[tableIndex];
// テーブルデータを格納する文字列を初期化
string tableData = "";
// テーブル内の行を反復処理
for (int rowIndex = 0; rowIndex < table.Rows.Count; rowIndex++)
{
// 現在の行を取得
TableRow row = table.Rows[rowIndex];
// 行内のセルを反復処理
for (int cellIndex = 0; cellIndex < row.Cells.Count; cellIndex++)
{
// 現在のセルを取得
TableCell cell = table.Rows[rowIndex].Cells[cellIndex];
// セル内のテキストを取得
string cellText = "";
for (int paraIndex = 0; paraIndex < cell.Paragraphs.Count; paraIndex++)
{
cellText += (cell.Paragraphs[paraIndex].Text.Trim() + " ");
}
// テキストを文字列に追加
tableData += cellText.Trim();
if (cellIndex < table.Rows[rowIndex].Cells.Count - 1)
{
tableData += "\t";
}
}
// 改行を追加
tableData += "\n";
}
// テーブルデータをテキストファイルに保存
string filePath = Path.Combine("Tables", $"Section{sectionIndex + 1}_Table{tableIndex + 1}.txt");
File.WriteAllText(filePath, tableData, Encoding.UTF8);
}
}
doc.Close();
}
}
}
C# で Word 文書から Excel ファイルに表を抽出する
抽出した表データをテキストファイルに保存するだけでなく、Spire.XLS for .NET ライブラリを使用して Excel ワークシートに直接書き込むこともできます。Spire.XLS for .NET を使用する前に、NuGet を介してインストールする必要があります:
Install-Package Spire.XLS
Word 文書から Excel ワークシートに表を抽出する手順は以下の通りです:
- Document クラスのオブジェクトを作成し、Document.LoadFromFile() メソッドを使用して Word 文書を読み込みます。
- Workbook クラスのオブジェクトを作成し、Workbook.Worksheets.Clear() メソッドを使用してデフォルトのワークシートをクリアします。
- 文書内のセクションを繰り返し処理し、Section.Tables プロパティを通じて各セクションの表コレクションを取得します。
- 各セクション内の表を繰り返し処理し、Workbook.Worksheets.Add() メソッドを使用して、各表ごとにワークシートをブックに追加します。
- 各表の行と各行内のセルを繰り返し処理し、TableCell.Paragraphs[index].Text プロパティを使用して各セルのテキストを取得し、Worksheet.SetCellValue() メソッドを使用してワークシートにテキストを書き込みます。
- Workbook.SaveToFile() メソッドを使用してワークブックを保存します。
- C#
using Spire.Doc;
using Spire.Doc.Interface;
using Spire.Xls;
namespace ExtractWordTableToExcel
{
internal class Program
{
static void Main(string[] args)
{
// Documentクラスのオブジェクトを作成
Document doc = new Document();
// Word文書をロード
doc.LoadFromFile("Sample.docx");
// Workbookクラスのオブジェクトを作成
Workbook wb = new Workbook();
// デフォルトのワークシートを削除
wb.Worksheets.Clear();
// 文書内のセクションを反復処理
for (int sectionIndex = 0; sectionIndex < doc.Sections.Count; sectionIndex++)
{
// 現在のセクションを取得
Section section = doc.Sections[sectionIndex];
// セクション内のテーブルを反復処理
for (int tableIndex = 0; tableIndex < section.Tables.Count; tableIndex++)
{
// 現在のテーブルを取得
ITable table = section.Tables[tableIndex];
// ワークブックにワークシートを追加
Worksheet ws = wb.Worksheets.Add($"Section{sectionIndex + 1}_Table{tableIndex + 1}");
// テーブル内の行を反復処理
for (int rowIndex = 0; rowIndex < table.Rows.Count; rowIndex++)
{
// 現在の行を取得
TableRow row = table.Rows[rowIndex];
// 行内のセルを反復処理
for (int cellIndex = 0; cellIndex < row.Cells.Count; cellIndex++)
{
// 現在のセルを取得
TableCell cell = row.Cells[cellIndex];
// セル内のテキストを取得
string cellText = "";
for (int paraIndex = 0; paraIndex < cell.Paragraphs.Count; paraIndex++)
{
cellText += (cell.Paragraphs[paraIndex].Text.Trim() + " ");
}
// セルのテキストをワークシートに書き込む
ws.SetCellValue(rowIndex + 1, cellIndex + 1, cellText);
}
// ワークシート内の列幅を自動調整
ws.Range.AutoFitColumns();
}
}
}
// ワークブックをExcelファイルに保存
wb.SaveToFile("Tables/Wordの表をExcelに抽出.xlsx", ExcelVersion.Version2016);
doc.Close();
wb.Dispose();
}
}
}
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。