كيفية العمل مع الجداول في .NET
Aspose.Slides FOSS for .NET supports creating tables on slides with configurable column widths and row heights. This guide shows how to add a table, populate it with data, and apply basic text formatting to cells.
دليل خطوة بخطوة
الخطوة 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 للحصول على القائمة الكاملة لسمات تنسيق الحدود.