.NET でテーブルを操作する方法

.NET でテーブルを操作する方法

Aspose.Slides FOSS for .NET は、列幅と行高さを設定可能なスライド上のテーブル作成をサポートします。このガイドでは、テーブルの追加方法、データでの入力方法、セルへの基本的なテキスト書式設定の適用方法を示します。

ステップバイステップ ガイド

ステップ 1: パッケージをインストールする

dotnet add package Aspose.Slides.Foss

ステップ 2: プレゼンテーションを作成または開く

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

using var prs = new Presentation();
var slide = prs.Slides[0];
// ... add table ...
prs.Save("table.pptx", SaveFormat.Pptx);

ステップ 3: 列幅と行高さを定義する

テーブルは、ポイント単位で列幅と行高さを明示的に指定する必要があります(1ポイント = 1/72インチ)。標準的なスライドは幅720ポイント、高さ540ポイントです。

var colWidths = new double[] { 200.0, 150.0, 150.0 };   // 3 columns
var rowHeights = new double[] { 45.0, 40.0, 40.0 };     // 3 rows

ステップ 4: テーブルを追加

slide.Shapes.AddTable(x, y, columnWidths, rowHeights) は位置 (x, y) にテーブルを作成します:

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

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

var colWidths = new double[] { 200.0, 150.0, 150.0 };
var rowHeights = new double[] { 45.0, 40.0, 40.0 };
var table = slide.Shapes.AddTable(50, 100, colWidths, rowHeights);

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

ステップ5: セルテキストを設定

table.Rows[rowIndex][colIndex] を使用してセルにアクセスし、.TextFrame.Text を介してテキストを割り当てます:

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

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

var colWidths = new double[] { 200.0, 150.0, 150.0 };
var rowHeights = new double[] { 45.0, 40.0, 40.0 };
var table = slide.Shapes.AddTable(50, 100, colWidths, rowHeights);

// Header row (row 0)
string[] headers = { "Product", "Units Sold", "Revenue" };
for (int col = 0; col < headers.Length; col++)
    table.Rows[0][col].TextFrame.Text = headers[col];

// Data rows
string[][] data = {
    new[] { "Widget A", "1,200", "$24,000" },
    new[] { "Widget B", "850", "$17,000" },
};
for (int rowIdx = 0; rowIdx < data.Length; rowIdx++)
    for (int col = 0; col < data[rowIdx].Length; col++)
        table.Rows[rowIdx + 1][col].TextFrame.Text = data[rowIdx][col];

prs.Save("sales-table.pptx", SaveFormat.Pptx);

ステップ 6: ヘッダーセルのテキストをフォーマット

PortionFormat を使用してヘッダーセルに太字書式を適用する:

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Drawing;

for (int col = 0; col < headers.Length; col++)
{
    var cell = table.Rows[0][col];
    var portions = cell.TextFrame.Paragraphs[0].Portions;
    if (portions.Count > 0)
    {
        var fmt = portions[0].PortionFormat;
        fmt.FontBold = NullableBool.True;
        fmt.FillFormat.FillType = FillType.Solid;
        fmt.FillFormat.SolidFillColor.Color = Color.FromArgb(255, 255, 255, 255);
    }
}

完全な作業例

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Drawing;
using Aspose.Slides.Foss.Export;

string[][] dataRows = {
    new[] { "North", "$1.2M", "+8%" },
    new[] { "South", "$0.9M", "+4%" },
    new[] { "East",  "$1.5M", "+12%" },
    new[] { "West",  "$0.7M", "+2%" },
};
string[] headers = { "Region", "Revenue", "Growth" };

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

var colWidths = new double[] { 180.0, 140.0, 120.0 };
var rowHeights = new double[dataRows.Length + 1];
rowHeights[0] = 45.0;
for (int i = 1; i < rowHeights.Length; i++) rowHeights[i] = 38.0;

var table = slide.Shapes.AddTable(60, 80, colWidths, rowHeights);

// Header row
for (int col = 0; col < headers.Length; col++)
{
    var cell = table.Rows[0][col];
    cell.TextFrame.Text = headers[col];
    if (cell.TextFrame.Paragraphs[0].Portions.Count > 0)
    {
        var fmt = cell.TextFrame.Paragraphs[0].Portions[0].PortionFormat;
        fmt.FontBold = NullableBool.True;
    }
}

// Data rows
for (int rowIdx = 0; rowIdx < dataRows.Length; rowIdx++)
    for (int col = 0; col < dataRows[rowIdx].Length; col++)
        table.Rows[rowIdx + 1][col].TextFrame.Text = dataRows[rowIdx][col];

prs.Save("regional-revenue.pptx", SaveFormat.Pptx);
Console.WriteLine("Saved regional-revenue.pptx");

よくある問題と対処法

IndexOutOfRangeException アクセス時に table.Rows[row][col]

行と列のインデックスはゼロベースです。rowHeights を 3 要素で定義した場合、有効な行インデックスは 0、1、2 です。

セルのテキストが保存されたファイルに表示されません

常に .TextFrame.Text を介して割り当て、セルオブジェクトに直接 .Text を使用しないでください:

// Correct
table.Rows[0][0].TextFrame.Text = "Header";

// Wrong: will not compile or silent failure
// table.Rows[0][0].Text = "Header";

テーブルの位置がスライドからずれています

標準スライドについて x + sum(colWidths) <= 720y + sum(rowHeights) <= 540 を確認してください。


よくある質問

テーブルのセルを結合できますか?

はい。Table.MergeCells(ICell cell1, ICell cell2, bool allowSplitting) を使用して隣接する 2 つのセルを結合します。allowSplittingfalse に設定して、結合されたセルが再び分割されないようにします。例:

// Merge cell (row 0, col 0) with cell (row 0, col 1)
var cell1 = table.Rows[0][0];
var cell2 = table.Rows[0][1];
table.MergeCells(cell1, cell2, false);

テーブル全体に背景色を適用できますか?

各個別セルに塗りつぶし書式を適用する:

using Aspose.Slides.Foss;
using Aspose.Slides.Foss.Drawing;

for (int row = 0; row < table.Rows.Count; row++)
    for (int col = 0; col < table.Rows[row].Count; col++)
    {
        var cell = table.Rows[row][col];
        cell.CellFormat.FillFormat.FillType = FillType.Solid;
        cell.CellFormat.FillFormat.SolidFillColor.Color = Color.FromArgb(255, 240, 248, 255);
    }

セルの罫線スタイルを設定できますか?

セルの境界線プロパティは cell.CellFormat.BorderLeftBorderTopBorderRight、および BorderBottom プロパティからアクセスできます。境界線フォーマット属性の完全なリストについては、APIリファレンスを参照してください。


参照

 日本語