كيفية العمل مع الجداول في .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/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) <= 720 و y + sum(rowHeights) <= 540 لشريحة قياسية.


الأسئلة المتكررة

هل يمكنني دمج خلايا الجدول؟

دمج الخلايا غير مدعوم في هذا الإصدار.

هل يمكنني تطبيق لون خلفية على كامل الجدول؟

تطبيق تنسيق التعبئة على كل خلية على حدة:

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.BorderLeft، BorderTop، BorderRight، وBorderBottom. راجع مرجع API للحصول على القائمة الكاملة لسمات تنسيق الحدود.


انظر أيضًا

 العربية