Word のテーブルには、テキストや画像など、さまざまな要素を含めることができます。場合によっては、画像をテーブルに挿入して情報を表示したり、他のドキュメントで使用するためにテーブルから画像を抽出したりすることがあります。この記事では、Spire.Doc for .NET を使用して、C# および VB.NET でプログラムによって Word でテーブルに画像を挿入または抽出する方法を示します。
Spire.Doc for .NET をインストールします
まず、Spire.Doc for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.Doc
C# および VB.NET で Word のテーブルに画像を挿入する
Spire.Doc for .NET が提供する TableCell.Paragraphs[int].AppendPicture() メソッドは、特定のテーブルのセルに画像を追加することをサポートします。詳細な手順は次のとおりです。
- Document のインスタンスを初期化します。
- Document.LoadFromFile() メソッドを使用して Word ドキュメントをロードします。
- Document.Sections [int] プロパティを使用して、特定のセクションをインデックスで取得します。
- Section.Tables[int] プロパティを使用して、セクション内の特定のテーブルをインデックスで取得します。
- Table.Row[int].Cells[int] プロパティを使用して、特定のセルにアクセスします。
- TableCell.Paragraphs[int].AppendPicture() メソッドを使用して、セルの特定の段落に画像を追加します。
- DocPicture.Width と DocPicture.Height プロパティを使用して、画像の幅と高さを設定します。
- Document.SaveToFile() メソッドを使用して結果ドキュメントを保存します。
- C#
- VB.NET
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
C# および VB.NET で Word のテーブルから画像を抽出する
テーブルから画像を抽出するには、すべての行、各行のすべてのセル、各セルのすべての段落と各段落のすべてのサブオブジェクトをループします。次に、DocPicture タイプのオブジェクトを見つけ、DocPicture.Image.Save() メソッドを使用して指定したファイルパスに保存します。具体的な手順は次のとおりです。
- Document のインスタンスを初期化します。
- Document.LoadFromFile() メソッドを使用して Word ドキュメントをロードします。
- Document.Sections [int] プロパティを使用して、特定のセクションをインデックスで取得します。
- Section.Tables[int] プロパティを使用して、セクション内の特定のテーブルをインデックスで取得します。
- テーブル内のすべての行をループします。
- 各行のすべてのセルをループします。
- 各セルのすべての段落をループします。
- 各段落のすべてのサブオブジェクトをループします。
- 現在のサブオブジェクトが DocPicture タイプであるかどうかを確認します。
- 結果が true の場合は、オブジェクトのタイプを DocPicture に変換し、DocPicture.Image.Save() メソッドを使用して指定したファイルパスに画像を保存します。
- C#
- VB.NET
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 日間有効な一時ライセンスを取得してください。