.NET でプレゼンテーション テーブルを管理する

概要

PowerPoint のテーブルは情報を行と列に整理し、値の読み取りや比較を容易にします。

Aspose.Slides は、Table クラス、ITable インターフェイス、Cell クラス、ICell インターフェイス、およびその他の型を提供し、プレゼンテーション内のテーブルを作成、更新、管理できるようにします。

最初からテーブルを作成する

位置、列幅、行高さを指定してテーブルを作成します。スライドに追加した後、セルの枠線を設定したり、セルを結合したり、テキストを挿入したりできます。

  1. Presentation クラスのインスタンスを作成します。
  2. インデックスでスライドへの参照を取得します。
  3. 列幅の配列(ポイント)を定義します。
  4. 行高さの配列(ポイント)を定義します。
  5. AddTable メソッドを使用して、スライドに ITable オブジェクトを追加します。
  6. 各 ICell を反復処理し、上・下・右・左の枠線を設定します。
  7. テーブルの最初の行の最初の 2 つのセルを結合します。
  8. 結合されたセルの TextFrame プロパティにアクセスします。
  9. 結合セルにテキストを設定します。
  10. 変更されたプレゼンテーションを保存します。

以下の例は、(100, 50) ポイントの位置に列が 3、行が 5 のテーブルを作成し、幅 5 ポイントの赤い枠線を適用し、最初の行の最初の 2 つのセルを結合し、結果を table.pptx として保存します。

using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var columnWidths = new double[] { 50, 50, 50 };
var rowHeights = new double[] { 50, 30, 30, 30, 30 };
var table = slide.Shapes.AddTable(100, 50, columnWidths, rowHeights);

foreach (var row in table.Rows)
{
    foreach (var cell in row)
    {
        var cellFormat = cell.CellFormat;
        cellFormat.BorderTop.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderTop.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderTop.Width = 5;

        cellFormat.BorderBottom.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderBottom.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderBottom.Width = 5;

        cellFormat.BorderLeft.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderLeft.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderLeft.Width = 5;

        cellFormat.BorderRight.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderRight.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderRight.Width = 5;
    }
}

table.MergeCells(table[0, 0], table[1, 0], false);
table[0, 0].TextFrame.Text = "Merged Cells";

presentation.Save("table.pptx", SaveFormat.Pptx);

標準テーブルの番号付け

標準テーブルでは、セルのインデックスは 0 から始まり、(列, 行) の順序で使用されます。最初のセルは (0, 0) とインデックス付けされます。

例として、4 列 4 行のテーブルのセルは次のように番号付けされます。

(0, 0) (1, 0) (2, 0) (3, 0)
(0, 1) (1, 1) (2, 1) (3, 1)
(0, 2) (1, 2) (2, 2) (3, 2)
(0, 3) (1, 3) (2, 3) (3, 3)

この例は、上記の 4 × 4 テーブルを作成し、列幅と行高さを 70 ポイント、枠線を幅 5 ポイントの赤で設定します。座標はセルインデックスを示しています。セルは空のままにし、テーブルを StandardTables_out.pptx として保存します。

using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var columnWidths = new double[] { 70, 70, 70, 70 };
var rowHeights = new double[] { 70, 70, 70, 70 };
var table = slide.Shapes.AddTable(100, 50, columnWidths, rowHeights);

foreach (var row in table.Rows)
{
    foreach (var cell in row)
    {
        var cellFormat = cell.CellFormat;
        cellFormat.BorderTop.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderTop.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderTop.Width = 5;

        cellFormat.BorderBottom.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderBottom.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderBottom.Width = 5;

        cellFormat.BorderLeft.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderLeft.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderLeft.Width = 5;

        cellFormat.BorderRight.FillFormat.FillType = FillType.Solid;
        cellFormat.BorderRight.FillFormat.SolidFillColor.Color = Color.Red;
        cellFormat.BorderRight.Width = 5;
    }
}

presentation.Save("StandardTables_out.pptx", SaveFormat.Pptx);

既存のテーブルにアクセスする

テーブルはスライドのシェイプコレクションに格納されています。シェイプを反復処理してテーブルを見つけ、ITable インターフェイスを使用してセルを読み取ったり更新したりします。

  1. Presentation クラスを使用してプレゼンテーションをロードします。
  2. インデックスでテーブルを含むスライドへの参照を取得します。
  3. IShape オブジェクトを反復処理し、テーブルが見つかった時点で停止します。スライドに複数のテーブルがある場合は、AlternativeText を使用して必要なテーブルを特定します。
  4. 対象セルのテキストを更新します。
  5. 変更されたプレゼンテーションを保存します。

以下の例は UpdateExistingTable.pptx を開き、最初のスライドの最初のテーブルを見つけます。列 0、行 1 のセルに New を設定し、結果を table1_out.pptx として保存します。入力には少なくとも 1 枚のスライドが含まれ、該当スライドの最初のテーブルは少なくとも 1 列 2 行を持っている必要があります。

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("UpdateExistingTable.pptx");
var slide = presentation.Slides[0];
ITable? table = null;

foreach (var shape in slide.Shapes)
{
    if (shape is ITable candidateTable)
    {
        table = candidateTable;
        break;
    }
}

table![0, 1].TextFrame.Text = "New";

presentation.Save("table1_out.pptx", SaveFormat.Pptx);

行の高さの制御については、Control Row Height を参照してください。

テキストフレームを所有するセルを見つける

テーブルから取得した ITextFrame を汎用テキスト処理コードが受け取った場合、所有する ICell を取得するには ITextFrame.ParentCell プロパティを使用します。テーブルセルのテキストフレームでは、ITextFrame.ParentCell が設定され、ITextFrame.ParentShape は null になります(テーブル自体はシェイプです)。

セルの座標は読み取り専用の ICell.FirstColumnIndex および ICell.FirstRowIndex プロパティで取得できます。ITextFrame.ParentCell も読み取り専用で、所有者へのナビゲーションを提供しますが、所有権は変更しません。使用前に取得したセルが null でないことを必ず確認してください。

テーブルセルとシェイプの所有者を特定する完全なサンプル(SmartArt ノードに関連付けられたシェイプを含む)については、Search and Replace Text を参照してください。

テーブル内のテキストを整列する

個々のテーブルセルの垂直位置合わせとテキスト方向を制御できます。このセクションの例は、最初のセル内のテキストを中央揃えにし、270 度回転させます。

  1. Presentation クラスのインスタンスを作成します。
  2. インデックスでスライドへの参照を取得します。
  3. スライドに ITable オブジェクトを追加します。
  4. テーブルから ITextFrame オブジェクトにアクセスします。
  5. 最初の IParagraph にアクセスし、テキストと色を設定します。
  6. セルの TextAnchorType と TextVerticalType を設定します。
  7. 変更されたプレゼンテーションを保存します。

この例は列幅 120 ポイント、行高さ 100 ポイントの 4 × 4 テーブルを作成し、セル (0, 0) のテキストを整形し、最初の行の残りのセルに値を追加し、結果を Vertical_Align_Text_out.pptx として保存します。

using System.Drawing;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var columnWidths = new double[] { 120, 120, 120, 120 };
var rowHeights = new double[] { 100, 100, 100, 100 };
var table = slide.Shapes.AddTable(100, 50, columnWidths, rowHeights);
table[1, 0].TextFrame.Text = "10";
table[2, 0].TextFrame.Text = "20";
table[3, 0].TextFrame.Text = "30";

var cell = table[0, 0];
var paragraph = cell.TextFrame.Paragraphs[0];
var portion = paragraph.Portions[0];
portion.Text = "Text here";
portion.PortionFormat.FillFormat.FillType = FillType.Solid;
portion.PortionFormat.FillFormat.SolidFillColor.Color = Color.Black;

cell.TextAnchorType = TextAnchorType.Center;
cell.TextVerticalType = TextVerticalType.Vertical270;

presentation.Save("Vertical_Align_Text_out.pptx", SaveFormat.Pptx);

テーブルレベルでテキスト書式設定を行う

SetTextFormat を使用すると、テーブル内のすべてのセルに対してテキスト書式設定を適用できます。オーバーロードは部分、段落、テキストフレームの書式設定を受け取り、個々のセルを反復処理せずにこれらのプロパティを設定できます。

  1. Presentation クラスを使用してプレゼンテーションをロードします。
  2. インデックスでスライドへの参照を取得します。
  3. スライドから ITable オブジェクトにアクセスします。
  4. テキストの FontHeight を設定します。
  5. Alignment と MarginRight を設定します。
  6. TextVerticalType を設定します。
  7. 変更されたプレゼンテーションを保存します。

以下の例は table.pptx を開きます(このファイルは少なくとも 1 枚のスライドを含み、最初のシェイプがテーブルである必要があります)。フォントサイズを 25 ポイントに設定し、右マージン 20 ポイントで段落を右揃えにし、テキストを垂直にします。書式設定されたプレゼンテーションは result.pptx として保存されます。

using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("table.pptx");
var slide = presentation.Slides[0];

var table = (ITable)slide.Shapes[0];

var portionFormat = new PortionFormat();
portionFormat.FontHeight = 25;
table.SetTextFormat(portionFormat);

var paragraphFormat = new ParagraphFormat();
paragraphFormat.Alignment = TextAlignment.Right;
paragraphFormat.MarginRight = 20;
table.SetTextFormat(paragraphFormat);

var textFrameFormat = new TextFrameFormat();
textFrameFormat.TextVerticalType = TextVerticalType.Vertical;
table.SetTextFormat(textFrameFormat);

presentation.Save("result.pptx", SaveFormat.Pptx);

テーブルスタイルプロパティを取得する

StylePreset を使用してテーブルのプリセットスタイルを読み取ったり割り当てたりできます。この例は、1 つのテーブルに TableStylePreset.DarkStyle1 を適用し、プリセット名を出力し、同じプリセットを 2 番目のテーブルに割り当てます。両方のテーブルは table-style.pptx に保存されます。

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var columnWidths = new double[] { 100, 150 };
var rowHeights = new double[] { 5, 5, 5 };
var table = slide.Shapes.AddTable(10, 10, columnWidths, rowHeights);
table.StylePreset = TableStylePreset.DarkStyle1;

var stylePreset = table.StylePreset;
Console.WriteLine($"Table style preset: {stylePreset}");

var anotherTable = slide.Shapes.AddTable(10, 100, columnWidths, rowHeights);
anotherTable.StylePreset = stylePreset;

presentation.Save("table-style.pptx", SaveFormat.Pptx);

テーブルのアスペクト比をロックする

テーブルのアスペクト比は幅と高さの比率です。AspectRatioLocked を使用してこの比率をロックできます。

以下の例は pres.pptx を開きます(このファイルは少なくとも 1 枚のスライドを含み、最初のシェイプがテーブルである必要があります)。現在のロック状態を出力し、アスペクト比ロックを有効にし、更新された状態 (True) を出力し、結果を pres-out.pptx として保存します。

using System;
using Aspose.Slides;
using Aspose.Slides.Export;

using var presentation = new Presentation("pres.pptx");
var slide = presentation.Slides[0];

var table = (ITable)slide.Shapes[0];

Console.WriteLine($"Lock aspect ratio set: {table.ShapeLock.AspectRatioLocked}");

table.ShapeLock.AspectRatioLocked = true;
Console.WriteLine($"Lock aspect ratio set: {table.ShapeLock.AspectRatioLocked}");

presentation.Save("pres-out.pptx", SaveFormat.Pptx);

FAQ

テーブル全体とセル内のテキストに対して右から左 (RTL) の読み方向を有効にできますか?

はい。テーブルは RightToLeft プロパティを公開し、段落は ParagraphFormat.RightToLeft を持ちます。両方を使用すると、セル内で正しい RTL の順序とレンダリングが保証されます。

最終ファイルでテーブルの移動やサイズ変更をユーザーに防止するにはどうすればよいですか?

shape locks を使用して、移動、サイズ変更、選択などを無効にします。これらのロックはテーブルにも適用されます。

セル内に画像を背景として挿入することはサポートされていますか?

はい。セルに対して picture fill を設定できます。画像は選択したモード(ストレッチまたはタイル)に従ってセル領域を覆います。