チュートリアル
簡単にライブラリーを使用するためのチュートリアルコレクション
Word 表の罫線を追加、変更、削除することで、データの可読性、美しさ、整理が向上します。罫線を追加することで、セルごとの内容が明確になり、情報を迅速に見分けやすくなります。罫線のスタイル(線の太さ、色、パターンなど)を変更することで、重要なデータを強調したり、視覚的な流れを導いたり、特定の文書スタイルやデザイン要件に適合させることができます。一方で、罫線を削除することで、視覚的な混雑を抑え、データをよりコンパクトでミニマルに表現できる場合もあります。特に厳密な区切りが不要なデータの提示や、構造の視覚的な強調を避けたい場合に適しています。
この記事では、C# プロジェクトで Spire.Doc for .NET を使用して、Word 表の罫線を追加、変更、削除する方法を紹介します。
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
Word 表全体のセルに罫線を設定するには、各セルを繰り返し処理し、その視覚的な罫線プロパティを設定する必要があります。以下は詳細な手順です:
using Spire.Doc;
namespace SpireDocDemo
{
internal class Program
{
static void Main(string[] args)
{
// 新しいDocumentオブジェクトを作成
Document doc = new Document();
// ファイルから文書をロード
doc.LoadFromFile("Sample.docx");
// 文書の最初のセクションを取得
Section section = doc.Sections[0];
// そのセクションの最初のテーブルを取得
Table table = (Table)section.Tables[0];
// ループ内で使用するTableRowとTableCell変数を宣言
TableRow tableRow;
TableCell tableCell;
// テーブル内のすべての行を反復処理
for (int i = 0; i < table.Rows.Count; i++)
{
// 現在の行を取得
tableRow = table.Rows[i];
// 現在の行内のすべてのセルを反復処理
for (int j = 0; j < tableRow.Cells.Count; j++)
{
// 現在のセルを取得
tableCell = tableRow.Cells[j];
// 現在のセルの枠線スタイルを単一線に設定
tableCell.CellFormat.Borders.BorderType = Spire.Doc.Documents.BorderStyle.Single;
}
}
// 変更された文書を新しいファイルとして保存
doc.SaveToFile("output/Wordの表に罫線を追加.docx");
// リソースを解放するために文書を閉じる
doc.Close();
}
}
}
Spire.Doc では、TableCell.CellFormat.Borders.BorderType(罫線のスタイル)、TableCell.CellFormat.Borders.LineWidth(罫線の幅)、TableCell.CellFormat.Borders.Color(罫線の色)など、さまざまな罫線プロパティを提供しています。これらのプロパティをカスタマイズして、目的の効果を実現できます。以下は詳細な手順です:
using Spire.Doc;
using Spire.Doc.Documents;
using System.Drawing;
namespace SpireDocDemo
{
internal class Program
{
static void Main(string[] args)
{
// 新しいDocumentオブジェクトを作成
Document doc = new Document();
// ファイルから文書をロード
doc.LoadFromFile("output/Wordの表に罫線を追加.docx");
// 文書の最初のセクションを取得
Section section = doc.Sections[0];
// そのセクションの最初のテーブルを取得
Table table = (Table)section.Tables[0];
// ループ内で使用するTableRowを宣言
TableRow tableRow;
// テーブルのすべての行を反復処理
for (int i = 1; i < table.Rows.Count - 1; i++)
{
tableRow = table.Rows[i];
// 現在のセルの境界線の色を設定
tableRow.Cells[1].CellFormat.Borders.Bottom.Color = Color.PaleVioletRed;
// 現在のセルの境界線スタイルをDotDashに設定
tableRow.Cells[1].CellFormat.Borders.Bottom.BorderType = BorderStyle.DotDash;
// 境界線の幅を設定
tableRow.Cells[1].CellFormat.Borders.Bottom.LineWidth = 2;
}
// 変更された文書を新しいファイルとして保存
doc.SaveToFile("output/Wordの表の罫線を変更.docx", FileFormat.Docx2016);
// 文書を閉じてリソースを解放
doc.Close();
}
}
}
Word 文書を扱う際、罫線スタイルは表全体に適用されるだけでなく、個々のセルにも拡張してカスタマイズすることが可能です。表のすべての罫線を完全に削除するには、まず表自体に対して罫線削除設定を適用し、その後、各セルを個別に処理して罫線スタイルをクリアすることが推奨されます。以下は詳細な手順です:
using Spire.Doc;
using Spire.Doc.Documents;
namespace SpireDocDemo
{
internal class Program
{
static void Main(string[] args)
{
// 新しいDocumentオブジェクトを作成
Document doc = new Document();
// ファイルから文書をロード
doc.LoadFromFile("output/Wordの表に罫線を追加.docx");
// 文書の最初のセクションを取得
Section section = doc.Sections[0];
// そのセクションの最初のテーブルを取得
Table table = (Table)section.Tables[0];
// テーブルの枠線を削除
table.TableFormat.Borders.BorderType = BorderStyle.None;
// ループで使用するTableRowを宣言
TableRow tableRow;
// テーブル内のすべての行を反復処理
for (int i = 0; i < table.Rows.Count; i++)
{
tableRow = table.Rows[i];
for (int j = 0; j < tableRow.Cells.Count; j++)
{
// セルのすべての枠線を削除
tableRow.Cells[j].CellFormat.Borders.BorderType = BorderStyle.None;
}
}
// 変更された文書を新しいファイルとして保存
doc.SaveToFile("output/Wordの表の罫線を削除.docx", FileFormat.Docx2016);
// リソースを解放するために文書を閉じる
doc.Close();
}
}
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
Word 文書内の表には、財務データや調査結果、統計記録など、貴重な情報が含まれていることがよくあります。これらの表に含まれるデータを抽出することで、詳細なデータ分析やトレンドの特定、他のツールやデータベースとのシームレスな統合など、さまざまな目的に活用できるチャンスが広がります。この記事では、C# を使用して、Spire.Doc for .NET を用いて Word 文書から表を抽出する方法を紹介します。
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
Spire.Doc for .NET では、Section.Tables プロパティを使用して、Word 文書のセクションに含まれる表にアクセスできます。このプロパティは、各セクション内の表を表す ITable オブジェクトのコレクションを返します。ITable オブジェクトを取得したら、各行やセルを繰り返し処理し、cell.Paragraphs[index].Text プロパティを使用して各セルのテキスト内容を取得します。表を抽出する手順は以下の通りです:
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();
}
}
}
抽出した表データをテキストファイルに保存するだけでなく、Spire.XLS for .NET ライブラリを使用して Excel ワークシートに直接書き込むこともできます。Spire.XLS for .NET を使用する前に、NuGet を介してインストールする必要があります:
Install-Package Spire.XLS
Word 文書から Excel ワークシートに表を抽出する手順は以下の通りです:
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 日間有効な一時ライセンスを取得してください。
Word 文書内の表は、データを明確かつ構造的に整理するのに役立ちます。しかし、文書が複雑になるにつれて、表の構造を調整する必要が生じることがあります。複数の表を結合して包括的に表示したり、大きな表を分割して可読性を向上させたりすることで、データの提示が大幅に改善されます。この記事では、Spire.Doc for .NET を使用して、C# で Word 文書内の表を結合または分割する方法を説明します。
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
Spire.Doc for .NET を使用すると、他の表からすべての行を対象の表にコピーし、その後他の表を削除することで、2つ以上の表を1つに結合できます。以下はその詳細手順です。
using Spire.Doc;
namespace CombineTables
{
class Program
{
static void Main(string[] args)
{
// ドキュメントのインスタンスを作成
Document doc = new Document();
// Word ドキュメントを読み込む
doc.LoadFromFile("Sample.docx");
// 最初のセクションを取得
Section section = doc.Sections[0];
// セクション内の最初と2番目のテーブルを取得
Table table1 = section.Tables[0] as Table;
Table table2 = section.Tables[1] as Table;
// table2の行をtable1に追加
for (int i = 0; i < table2.Rows.Count; i++)
{
table1.Rows.Add(table2.Rows[i].Clone());
}
// table2を削除
section.Tables.Remove(table2);
// 結果のドキュメントを保存
doc.SaveToFile("Word文書内の表をマージ.docx", FileFormat.Docx);
doc.Close();
}
}
}
表を2つ以上に分割するには、新しい表を作成し、元の表から指定した行を新しい表にコピーし、元の表からそれらの行を削除します。以下はその詳細手順です。
using Spire.Doc;
namespace SplitWordTable
{
class Program
{
static void Main(string[] args)
{
// ドキュメントのインスタンスを作成
Document doc = new Document();
// Word ドキュメントを読み込む
doc.LoadFromFile("Word文書内の表をマージ.docx");
// 最初のセクションを取得
Section section = doc.Sections[0];
// セクション内の最初のテーブルを取得
Table table = section.Tables[0] as Table;
// テーブルを5行目から分割するように指定
int splitIndex = 5;
// 同じスタイルで新しいテーブルを作成
Table newTable = table.Clone();
newTable.Rows.Clear();
// 5行目から最後の行までを新しいテーブルに追加
for (int i = splitIndex; i < table.Rows.Count; i++)
{
newTable.Rows.Add(table.Rows[i].Clone());
}
// 元のテーブルから行を削除
for (int i = table.Rows.Count - 1; i >= splitIndex; i--)
{
table.Rows.RemoveAt(i);
}
// 新しいテーブルをセクションに追加
section.Tables.Add(newTable);
// 結果のドキュメントを保存
doc.SaveToFile("Word文書内の表を分割.docx", FileFormat.Docx);
doc.Close();
}
}
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
Word 文書の表で列の幅を設定することは、文書の可読性と美観を最適化するために重要です。適切な列幅は、長いテキスト行が可読性を妨げるのを防ぎ、特にテキストが密に詰まった表ではその効果が顕著です。Word 文書では、パーセントと固定値の2つのアプローチを提供しています。パーセント値を使用して列幅を設定することで、異なる画面サイズに応じて表を調整し、コンテンツが整然と配置され、読みやすさが向上します。一方、固定値を使用することで、表の構造を正確に制御でき、一貫性とプロフェッショナリズムが確保され、厳格なデータ配置要件や複雑なレイアウトが求められるデザインに適しています。
この記事では、C# プロジェクトで Spire.Doc for .NET を使用して、Word 文書の表の列幅をパーセントまたは固定値に基づいて設定する方法を紹介します。
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
Word の表で列幅をパーセント値で設定する際には、まず表の優先幅のタイプをパーセントに設定する必要があります。これは、Table.PreferredWidth = new PreferredWidth(WidthType.Percentage, (short)100) で行います。その後、各列を繰り返し処理し、必要に応じて同じまたは異なるパーセント値を設定します。以下は詳細な手順です。
using Spire.Doc;
namespace SpireDocDemo
{
internal class Program
{
static void Main(string[] args)
{
// 新しいDocumentオブジェクトを作成
Document doc = new Document();
// "Sample.docx"という名前のドキュメントを読み込む
doc.LoadFromFile("Sample.docx");
// ドキュメントの最初のセクションを取得
Section section = doc.Sections[0];
// セクション内の最初のテーブルをTable型にキャスト
Table table = (Table)section.Tables[0];
// PreferredWidthオブジェクトを作成し、幅タイプをパーセンテージに設定し、幅の値を100%に設定
PreferredWidth percentageWidth = new PreferredWidth(WidthType.Percentage, (short)100);
// テーブルの推奨幅を上で作成したPreferredWidthオブジェクトに設定
table.PreferredWidth = percentageWidth;
// TableRow型の変数を定義
TableRow tableRow;
// テーブル内のすべての行を繰り返し処理
for (int i = 0; i < table.Rows.Count; i++)
{
// 現在の行を取得
tableRow = table.Rows[i];
// 最初の列のセルの幅を34%に設定し、タイプをパーセンテージに設定
tableRow.Cells[0].SetCellWidth(34, CellWidthType.Percentage);
// 2番目の列のセルの幅を33%に設定し、タイプをパーセンテージに設定
tableRow.Cells[1].SetCellWidth(33, CellWidthType.Percentage);
// 3番目の列のセルの幅を33%に設定し、タイプをパーセンテージに設定
tableRow.Cells[2].SetCellWidth(33, CellWidthType.Percentage);
}
// 修正したドキュメントを保存し、ファイル形式をDocx2016として指定
doc.SaveToFile("output/パーセントで列幅を設定.docx", FileFormat.Docx2016);
// ドキュメントを閉じる
doc.Close();
}
}
}
Word の表で列幅を固定値で設定する際には、まず表のレイアウトを固定に設定する必要があります。これは、Table.TableFormat.LayoutType = LayoutType.Fixed で行います。その後、各列を繰り返し処理し、必要に応じて同じまたは異なる固定値を設定します。以下は詳細な手順です。
using Spire.Doc;
namespace SpireDocDemo
{
internal class Program
{
static void Main(string[] args)
{
// 新しいDocumentオブジェクトを作成
Document doc = new Document();
// ドキュメントを読み込む
doc.LoadFromFile("Sample.docx");
// ドキュメントの最初のセクションを取得
Section section = doc.Sections[0];
// セクション内の最初のテーブルをTable型にキャスト
Table table = (Table)section.Tables[0];
// テーブルレイアウトタイプを固定に設定
table.TableFormat.LayoutType = LayoutType.Fixed;
// テーブルの自動サイズ変更モードを無効に設定
table.TableFormat.IsAutoResized = false;
// 左マージンを取得
float leftMargin = section.PageSetup.Margins.Left;
// 右マージンを取得
float rightMargin = section.PageSetup.Margins.Right;
// 左右のマージンを引いたページ幅を計算
double pageWidth = section.PageSetup.PageSize.Width - leftMargin - rightMargin - 70;
// TableRow型の変数を定義
TableRow tableRow;
// テーブル内のすべての行をループ
for (int i = 0; i < table.Rows.Count; i++)
{
// 現在の行を取得
tableRow = table.Rows[i];
// 最初の列のセルの幅をページ幅の34%に設定
tableRow.Cells[0].SetCellWidth((float)(pageWidth * 0.34), CellWidthType.Point);
// 2番目の列のセルの幅をページ幅の33%に設定
tableRow.Cells[1].SetCellWidth((float)(pageWidth * 0.33), CellWidthType.Point);
// 3番目の列のセルの幅をページ幅の33%に設定
tableRow.Cells[2].SetCellWidth((float)(pageWidth * 0.33), CellWidthType.Point);
}
// 修正したドキュメントを保存し、ファイル形式をDocx2016として指定
doc.SaveToFile("output/固定値で列幅を設定.docx", FileFormat.Docx2016);
// ドキュメントを閉じる
doc.Close();
}
}
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
Word ドキュメントで表の行と列を追加・削除する機能は、情報の正確性、明確さ、関連性を維持するために非常に重要です。追加の行や列を加えることで、表の元の構造を変更し、データの変化に対応することができます。逆に、不必要な行や列を削除することで、ドキュメントを簡潔にし、読みやすくすることが可能です。本記事では、C# で Spire.Doc for .NET を使用して Word ドキュメント内の表の行と列を追加または削除する方法を紹介します。
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
Spire.Doc for .NET を使用すると、Table.AddRow() または Table.Rows.Insert() メソッドを用いて、Word ドキュメント内の表の末尾に行を追加したり、特定の位置に行を挿入したりすることができます。以下に詳細な手順を示します。
using Spire.Doc;
namespace AddRows
{
class Program
{
static void Main(string[] args)
{
//Documentオブジェクトを作成
Document doc = new Document();
//Wordドキュメントを読み込む
doc.LoadFromFile("Sample.docx");
//最初のセクションを取得
Section section = doc.Sections[0];
//セクション内の最初の表を取得
Table table = (Table)section.Tables[0];
//表の3行目に行を挿入
table.Rows.Insert(2, table.AddRow());
//表の末尾に行を追加
table.AddRow();
//結果を保存
doc.SaveToFile("output/表の行を追加.docx");
doc.Close();
}
}
}
Spire.Doc for .NET には、Word ドキュメント内の表に列を直接追加・挿入するためのメソッドがありません。しかし、TableRow.AddCell() または TableRow.Cells.Insert() メソッドを用いて、各表行の特定の位置にセルを追加・挿入することで、この操作を実現できます。以下に詳細な手順を示します。
using Spire.Doc;
namespace AddColumns
{
class Program
{
static void Main(string[] args)
{
//Documentオブジェクトを作成
Document doc = new Document();
//Wordドキュメントを読み込む
doc.LoadFromFile("Sample.docx");
//最初のセクションを取得
Section section = doc.Sections[0];
//セクション内の最初の表を取得
Table table = (Table)section.Tables[0];
//表内の行をループ処理
for (int i = 0; i < table.Rows.Count; i++)
{
//指定された行を取得
TableRow row = table.Rows[i];
//TableCellオブジェクトを作成
TableCell cell = new TableCell(table.Document);
//行の3番目のセルとして挿入
row.Cells.Insert(2, cell);
//セルの幅を設定
row.Cells[2].SetCellWidth(40, CellWidthType.Point);
//行の末尾にセルを追加
row.AddCell();
}
//結果を保存
doc.SaveToFile("output/表の列を追加.docx");
doc.Close();
}
}
}
Word ドキュメント内の表から特定の行を削除するには、Table.Rows.RemoveAt() メソッドを直接使用できます。一方、特定の列を削除するには、各表行から対応するセルを TableRow.Cells.RemoveAt() メソッドで削除する必要があります。以下に詳細な手順を示します。
using Spire.Doc;
namespace AddColumns
{
class Program
{
static void Main(string[] args)
{
//Documentオブジェクトを作成
Document doc = new Document();
//Wordドキュメントを読み込む
doc.LoadFromFile("Sample.docx");
//最初のセクションを取得
Section section = doc.Sections[0];
//セクション内の最初の表を取得
Table table = (Table)section.Tables[0];
//4行目を削除
table.Rows.RemoveAt(1);
//表内の行をループ処理
for (int i = 0; i < table.Rows.Count; i++)
{
//指定された行を取得
TableRow row = table.Rows[i];
//行から2番目のセルを削除
row.Cells.RemoveAt(2);
}
//結果を保存
doc.SaveToFile("output/行と列の削除.docx");
doc.Close();
}
}
}
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
Word のテーブルには、テキストや画像など、さまざまな要素を含めることができます。場合によっては、画像をテーブルに挿入して情報を表示したり、他のドキュメントで使用するためにテーブルから画像を抽出したりすることがあります。この記事では、Spire.Doc for .NET を使用して、C# および VB.NET でプログラムによって Word でテーブルに画像を挿入または抽出する方法を示します。
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
Spire.Doc for .NET が提供する TableCell.Paragraphs[int].AppendPicture() メソッドは、特定のテーブルのセルに画像を追加することをサポートします。詳細な手順は次のとおりです。
using Spire.Doc;
using Spire.Doc.Fields;
using System.Drawing;
namespace InsertImagesIntoTable
{
class Program
{
static void Main(string[] args)
{
//Documentのインスタンスを初期化する
Document doc = new Document();
//Wordドキュメントをロードする
doc.LoadFromFile("Table.docx");
//最初のセクションを取得する
Section section = doc.Sections[0];
//セクションから最初のテーブルを取得する
Table table = (Table)section.Tables[0];
//テーブルの2行目の3番目のセルに画像を追加する
TableCell cell = table.Rows[1].Cells[2];
DocPicture picture = cell.Paragraphs[0].AppendPicture(Image.FromFile("doc.png"));
//画像の幅と高さを設定する
picture.Width = 100;
picture.Height = 100;
//テーブルの3行目の3番目のセルに画像を追加する
cell = table.Rows[2].Cells[2];
picture = cell.Paragraphs[0].AppendPicture(Image.FromFile("xls.png"));
//画像の幅と高さを設定する
picture.Width = 100;
picture.Height = 100;
//結果ドキュメントを保存する
doc.SaveToFile("AddImageToTable.docx", FileFormat.Docx2013);
}
}
}
Imports Spire.Doc
Imports Spire.Doc.Fields
Namespace InsertImagesIntoTable
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'Documentのインスタンスを初期化する
Dim doc As Document = New Document()
'Wordドキュメントをロードする
doc.LoadFromFile("Table.docx")
' 最初のセクションを取得する
Dim section As Section = doc.Sections(0)
'セクションから最初のテーブルを取得する
Dim table As Table = CType(section.Tables(0), Table)
'テーブルの2行目の3番目のセルに画像を追加する
Dim cell As TableCell = table.Rows(1).Cells(2)
Dim picture As DocPicture = cell.Paragraphs(0).AppendPicture(Image.FromFile("doc.png"))
'画像の幅と高さを設定する
picture.Width = 100
picture.Height = 100
'テーブルの3行目の3番目のセルに画像を追加する
cell = table.Rows(2).Cells(2)
picture = cell.Paragraphs(0).AppendPicture(Image.FromFile("xls.png"))
'画像の幅と高さを設定する
picture.Width = 100
picture.Height = 100
'結果ドキュメントを保存する
doc.SaveToFile("AddImageToTable.docx", FileFormat.Docx2013)
End Sub
End Class
End Namespace
テーブルから画像を抽出するには、すべての行、各行のすべてのセル、各セルのすべての段落と各段落のすべてのサブオブジェクトをループします。次に、DocPicture タイプのオブジェクトを見つけ、DocPicture.Image.Save() メソッドを使用して指定したファイルパスに保存します。具体的な手順は次のとおりです。
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System;
using System.Drawing.Imaging;
namespace ExtractImagesFromTable
{
class Program
{
static void Main(string[] args)
{
//Documentクラスを初期化する
Document doc = new Document();
//Wordドキュメントをロードする
doc.LoadFromFile("AddImageToTable.docx");
//最初のセクションを取得する
Section section = doc.Sections[0];
//セクションから最初のテーブルを取得する
Table table = (Table)section.Tables[0];
int index = 0;
string imageName = null;
//テーブル内のすべての行をループする
for (int i = 0; i < table.Rows.Count; i++)
{
//各行のすべてのセルをループする
for (int j = 0; j < table.Rows[i].Cells.Count; j++)
{
//各セル内のすべての段落をループする
foreach (Paragraph para in table[i, j].Paragraphs)
{
//各段落内のすべてのサブオブジェクトをループする
foreach (DocumentObject obj in para.ChildObjects)
{
//現在のサブオブジェクトがDocPictureタイプであるかどうかを確認する
if (obj is DocPicture)
{
//指定したファイルパスに画像を保存する
imageName = string.Format(@"images\TableImage-{0}.png", index);
(obj as DocPicture).Image.Save(imageName, ImageFormat.Png);
index++;
}
}
}
}
}
}
}
}
Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Imports System.Drawing.Imaging
Namespace ExtractImagesFromTable
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'Documentクラスを初期化する
Dim doc As Document = New Document()
' Wordドキュメントをロードする
doc.LoadFromFile("AddImageToTable.docx")
'ドキュメントの最初のセクションを取得する
Dim section As Section = doc.Sections(0)
'最初のセクションから最初のテーブルを取得する
Dim table As Table = CType(section.Tables(0), Table)
Dim index = 0
Dim imageName As String = Nothing
'テーブル内のすべての行をループする
For i As Integer = 0 To table.Rows.Count - 1
'各行のすべてのセルをループする
For j As Integer = 0 To table.Rows(i).Cells.Count - 1
'各セル内のすべての段落をループする
For Each para As Paragraph In table(i, j).Paragraphs
'各段落内のすべてのサブオブジェクトをループする
For Each obj As DocumentObject In para.ChildObjects
'現在のサブオブジェクトがDocPictureタイプであるかどうかを確認する
If TypeOf obj Is DocPicture Then
'指定したファイルパスに画像を保存する
imageName = string.Format("images\TableImage-{0}.png", index)
TryCast(obj, DocPicture).Image.Save(imageName, ImageFormat.Png)
index += 1
End If
Next
Next
Next
Next
End Sub
End Class
End Namespace
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
セルの結合は、2つ以上のセルを1つの大きなセルに結合することです。セルの分割は、1つのセルを2つ以上の小さなセルに分割することです。Microsoft Word で表を作成または編集する際には、データをよりよく表示するために、表のセルを結合または分割する必要があることがよくあります。この記事では、Spire.Doc for .NET を使用して、C# および VB.NET でプログラムによって Word で表のセルを結合または分割する方法を示します。
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
Microsoft Word では、垂直または水平に隣接する2つ以上のセルを1つの大きなセルに結合できます。Spire.Doc では、Table.ApplyHorizontalMerge() と Table.ApplyVerticalMerge() メソッドを使用してセルを結合できます。詳細な手順は次のとおりです。
using Spire.Doc;
using Spire.Doc.Documents;
namespace MergeTableCells
{
class Program
{
static void Main(string[] args)
{
//Documentインスタンスを作成する
Document document = new Document();
//Wordドキュメントをロードする
document.LoadFromFile("sample.docx");
//最初のセクションを取得する
Section section = document.Sections[0];
//セクションに4 x 4の表を追加する
Table table = section.AddTable();
table.ResetCells(4, 4);
//最初の行のセル1、2、3、4を水平に結合する
table.ApplyHorizontalMerge(0, 0, 3);
//最初の列のセル3と4を垂直に結合する
table.ApplyVerticalMerge(0, 2, 3);
//表にデータを追加する
for (int row = 0; row < table.Rows.Count; row++)
{
for (int col = 0; col < table.Rows[row].Cells.Count; col++)
{
TableCell cell = table[row, col];
cell.CellFormat.VerticalAlignment = VerticalAlignment.Middle;
Paragraph paragraph = cell.AddParagraph();
paragraph.Format.HorizontalAlignment = HorizontalAlignment.Center;
paragraph.Text = "テキスト";
}
}
//表にスタイルを適用する
table.ApplyStyle(DefaultTableStyle.LightGridAccent1);
//結果ドキュメントを保存する
document.SaveToFile("MergeCells.docx", FileFormat.Docx2013);
}
}
}
Imports Spire.Doc
Imports Spire.Doc.Documents
Namespace MergeTableCells
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'Documentインスタンスを作成する
Dim document As Document = New Document()
'Wordドキュメントをロードする
document.LoadFromFile("sample.docx")
'最初のセクションを取得する
Dim section As Section = document.Sections(0)
'セクションに4 x 4の表を追加する
Dim table As Table = section.AddTable()
table.ResetCells(4, 4)
'最初の行のセル1、2、3、4を水平に結合する
table.ApplyHorizontalMerge(0, 0, 3)
'最初の列のセル3と4を垂直に結合する
table.ApplyVerticalMerge(0, 2, 3)
'表にデータを追加する
For row As Integer = 0 To table.Rows.Count - 1
For col As Integer = 0 To table.Rows(row).Cells.Count - 1
Dim cell As TableCell = table(row, col)
cell.CellFormat.VerticalAlignment = VerticalAlignment.Middle
Dim paragraph As Paragraph = cell.AddParagraph()
paragraph.Format.HorizontalAlignment = HorizontalAlignment.Center
paragraph.Text = "テキスト"
Next
Next
'表にスタイルを適用する
table.ApplyStyle(DefaultTableStyle.LightGridAccent1)
'結果ドキュメントを保存する
document.SaveToFile("MergeCells.docx", FileFormat.Docx2013)
End Sub
End Class
End Namespace
Spire.Doc for .NET が提供する TableCell.SplitCell() メソッドは、Word で表のセルを2つ以上のセルに分割することをサポートしています。詳細な手順は次のとおりです。
using Spire.Doc;
namespace SplitTableCells
{
class Program
{
static void Main(string[] args)
{
//Documentインスタンスを作成する
Document document = new Document();
//Wordドキュメントをロードする
document.LoadFromFile("MergeCells.docx");
//最初のセクションを取得する
Section section = document.Sections[0];
//セクションの最初の表を取得する
Table table = section.Tables[0] as Table;
//4行の4番目のセルを取得する
TableCell cell1 = table.Rows[3].Cells[3];
//セルを2列2行に分割する
cell1.SplitCell(2, 2);
//結果ドキュメントを保存する
document.SaveToFile("SplitCells.docx", FileFormat.Docx2013);
}
}
}
Imports Spire.Doc
Namespace SplitTableCells
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'Documentインスタンスを作成する
Dim document As Document = New Document()
'Wordドキュメントをロードする
document.LoadFromFile("MergeCells.docx")
'最初のセクションを取得する
Dim section As Section = document.Sections(0)
'セクションの最初の表を取得する
Dim table As Table = TryCast(section.Tables(0), Table)
'4行の4番目のセルを取得する
Dim cell1 As TableCell = table.Rows(3).Cells(3)
'セルを2列2行に分割する
cell1.SplitCell(2, 2)
'結果ドキュメントを保存する
document.SaveToFile("SplitCells.docx", FileFormat.Docx2013)
End Sub
End Class
End Namespace
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。
MS Word では、表によってデータを行と列に整理して表示することができるので、情報を理解しやすく、分析しやすくすることができます。この記事では、Spire.Doc for .NET を使って、Word ドキュメント内のデータで表を作成する方法を説明します。
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
以下は、Word ドキュメントで表を作成し、書式設定するために Spire.Doc for .NET が提供する主要なクラスとメソッドの一部です。
名前 | 説明 |
Table クラス | Word ドキュメント内の表を表します。 |
TableRow クラス | 表中の行を表します。 |
TableCell クラス | 表中の特定のセルを表します。 |
Section.AddTbale() メソッド | 指定されたセクションに新しい表を追加するために使用します。 |
Table.ResetCells() メソッド | 行番号、列番号のリセットに使用します。 |
Table.Rows プロパティ | 表の行を取得するために使用します。 |
TableRow.Height プロパティ | 指定された行の高さを設定するために使用します。 |
TableRow.Cells プロパティ | セル集を返します。 |
TableRow.RowFormat プロパティ | 指定された行の書式を取得するために使用します。 |
詳細な手順は以下の通りです。
using System;
using System.Drawing;
using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
namespace WordTable
{
class Program
{
static void Main(string[] args)
{
//Documentクラスのオブジェクトを作成する
Document doc = new Document();
//セクションを追加する
Section s = doc.AddSection();
//表のデータを定義する
String[] Header = { "日付", "商品名", "販売地域", "在庫量", "注文量" };
String[][] data = {
new String[]{ "08/07/2021", "カヤック", "米国", "24","16"},
new String[]{ "08/07/2021", "潜水機", "米国", "5","3"},
new String[]{ "08/07/2021", "制御システム", "チェコ共和国", "165","216"},
new String[]{ "08/08/2021", "二段レギュレータ", "米国", "98","88"},
new String[]{ "08/08/2021", "個人用潜水ソナー", "米国", "46","45"},
new String[]{ "08/09/2021", "コンパスコンソール", "米国", "211","300"},
new String[]{ "08/09/2021", "制御システム", "イギリス", "166","100"},
new String[]{ "08/10/2021", "予備のエアダンサ", "イギリス", "47","43"},
};
//表を追加する
Table table = s.AddTable(true);
table.ResetCells(data.Length + 1, Header.Length);
//最初の行を表のヘッダーとして設定する
TableRow FRow = table.Rows[0];
FRow.IsHeader = true;
//1列目の高さと色を設定する
FRow.Height = 23;
FRow.RowFormat.BackColor = Color.LightSeaGreen;
for (int i = 0; i < Header.Length; i++)
{
//セルの配置を設定する
Paragraph p = FRow.Cells[i].AddParagraph();
FRow.Cells[i].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
p.Format.HorizontalAlignment = HorizontalAlignment.Center;
//データのフォーマットを設定する
TextRange TR = p.AppendText(Header[i]);
TR.CharacterFormat.FontName = "Calibri";
TR.CharacterFormat.FontSize = 12;
TR.CharacterFormat.Bold = true;
}
//他の行にデータを追加し、セルの書式を設定する
for (int r = 0; r < data.Length; r++)
{
TableRow DataRow = table.Rows[r + 1];
DataRow.Height = 20;
for (int c = 0; c < data[r].Length; c++)
{
DataRow.Cells[c].CellFormat.VerticalAlignment = VerticalAlignment.Middle;
Paragraph p2 = DataRow.Cells[c].AddParagraph();
TextRange TR2 = p2.AppendText(data[r][c]);
p2.Format.HorizontalAlignment = HorizontalAlignment.Center;
//データの書式を設定する
TR2.CharacterFormat.FontName = "Calibri";
TR2.CharacterFormat.FontSize = 11;
}
}
//ドキュメントを保存する
doc.SaveToFile("表の追加.docx", FileFormat.Docx2013);
}
}
}
Imports System.Drawing
Imports Spire.Doc
Imports Spire.Doc.Documents
Imports Spire.Doc.Fields
Namespace WordTable
Class Program
Shared Sub Main(ByVal args() As String)
'Documentクラスのオブジェクトを作成する
Dim doc As Document = New Document()
'セクションを追加する
Dim s As Section = doc.AddSection()
'表のデータを定義する
Dim Header() As String = {"日付", "商品名", "販売地域", "在庫量", "注文量"}
Dim data()() As String = {New String() {"08/07/2021", "カヤック", "米国", "24", "16"}
,
New String()
{
"08/07/2021", "潜水機", "米国", "5","3"
}
,
New String()
{
"08/07/2021", "制御システム", "チェコ共和国", "165","216"
}
,
New String()
{
"08/08/2021", "二段レギュレータ", "米国", "98","88"
}
,
New String()
{
"08/08/2021", "個人用潜水ソナー", "米国", "46","45"
}
,
New String()
{
"08/09/2021", "コンパスコンソール", "米国", "211","300"
}
,
New String()
{
"08/09/2021", "制御システム", "イギリス", "166","100"
}
,
New String()
{
"08/10/2021", "予備のエアダンサ", "イギリス", "47","43"
}
,
}
'表を追加する
Dim table As Table = s.AddTable(True)
table.ResetCells(data.Length + 1, Header.Length)
'最初の行を表のヘッダーとして設定する
Dim FRow As TableRow = table.Rows(0)
FRow.IsHeader = True
'1列目の高さと色を設定する
FRow.Height = 23
FRow.RowFormat.BackColor = Color.LightSeaGreen
Dim i As Integer
For i = 0 To Header.Length - 1 Step i + 1
'セルの配置を設定する
Dim p As Paragraph = FRow.Cells(i).AddParagraph()
FRow.Cells(i).CellFormat.VerticalAlignment = VerticalAlignment.Middle
p.Format.HorizontalAlignment = HorizontalAlignment.Center
'データのフォーマットを設定する
Dim TR As TextRange = p.AppendText(Header(i))
TR.CharacterFormat.FontName = "Yu Gothic UI"
TR.CharacterFormat.FontSize = 12
TR.CharacterFormat.Bold = True
Next
'他の行にデータを追加し、セルの書式を設定する
Dim r As Integer
For r = 0 To data.Length - 1 Step r + 1
Dim DataRow As TableRow = table.Rows(r + 1)
DataRow.Height = 20
Dim c As Integer
For c = 0 To data(r).Length - 1 Step c + 1
DataRow.Cells(c).CellFormat.VerticalAlignment = VerticalAlignment.Middle
Dim p2 As Paragraph = DataRow.Cells(c).AddParagraph()
Dim TR2 As TextRange = p2.AppendText(data(r)(c))
p2.Format.HorizontalAlignment = HorizontalAlignment.Center
'データの書式を設定する
TR2.CharacterFormat.FontName = "Yu Mincho"
TR2.CharacterFormat.FontSize = 11
Next
Next
'ドキュメントを保存する
doc.SaveToFile("表の追加.docx", FileFormat.Docx2013)
End Sub
End Class
End Namespace
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。