إدارة خلايا الجدول في العروض التقديمية باستخدام Java
تحديد خلية جدول مدمجة
- إنشاء كائن من الفئة Presentation class.
- الحصول على الجدول من الشريحة الأولى.
- تكرار الصفوف والأعمدة في الجدول للعثور على الخلايا المدمجة.
- طباعة رسالة عند العثور على خلايا مدمجة.
يظهر لك هذا الكود بلغة Java كيفية تحديد الخلايا المدمجة في جدول داخل عرض تقديمي:
Presentation pres = new Presentation("SomePresentationWithTable.pptx");
try {
ITable table = (ITable)pres.getSlides().get_Item(0).getShapes().get_Item(0); // نفترض أن Slide#0.Shape#0 هو جدول
for (int i = 0; i < table.getRows().size(); i++)
{
for (int j = 0; j < table.getColumns().size(); j++)
{
ICell currentCell = table.getRows().get_Item(i).get_Item(j);
if (currentCell.isMergedCell())
{
System.out.println(String.format("Cell %d;%d is a part of merged cell with RowSpan=%d and ColSpan=%d starting from Cell %d;%d.",
i, j, currentCell.getRowSpan(), currentCell.getColSpan(), currentCell.getFirstRowIndex(), currentCell.getFirstColumnIndex()));
}
}
}
} finally {
if (pres != null) pres.dispose();
}
إزالة حدود خلية الجدول
- إنشاء كائن من الفئة Presentation class.
- الحصول على مرجع الشريحة عبر الفهرس الخاص بها.
- تحديد مصفوفة الأعمدة مع العرض.
- تحديد مصفوفة الصفوف مع الارتفاع.
- إضافة جدول إلى الشريحة عبر طريقة addTable .
- التكرار عبر كل خلية لإزالة الحدود العليا والسفلى واليمين واليسار.
- حفظ العرض التقديمي المعدل كملف PPTX.
يعرض لك هذا الكود بلغة Java كيفية إزالة الحدود من خلايا الجدول:
// ينشئ كائن من فئة Presentation التي تمثل ملف PPTX
Presentation pres = new Presentation();
try {
// يصل إلى الشريحة الأولى
Slide sld = (Slide)pres.getSlides().get_Item(0);
// يعرف الأعمدة بعرضها والصفوف بارتفاعها
double[] dblCols = { 50, 50, 50, 50 };
double[] dblRows = { 50, 30, 30, 30, 30 };
// يضيف شكل جدول إلى الشريحة
ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// يضبط تنسيق الحدود لكل خلية
for (IRow row : tbl.getRows())
{
for (ICell cell : row)
{
cell.getCellFormat().getBorderTop().getFillFormat().setFillType(FillType.NoFill);
cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(FillType.NoFill);
cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(FillType.NoFill);
cell.getCellFormat().getBorderRight().getFillFormat().setFillType(FillType.NoFill);
}
}
// يحفظ ملف PPTX على القرص
pres.save("table_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
الترقيم في الخلايا المدمجة
إذا دمجنا زوجين من الخلايا (1, 1) × (2, 1) و (1, 2) × (2, 2)، سيتم ترقيم الجدول الناتج. يوضح هذا الكود بلغة Java العملية:
// ينشئ فئة Presentation التي تمثل ملف PPTX
Presentation pres = new Presentation();
try {
// الوصول إلى الشريحة الأولى
ISlide sld = pres.getSlides().get_Item(0);
// يعرف الأعمدة بعرضها والصفوف بارتفاعها
double[] dblCols = { 70, 70, 70, 70 };
double[] dblRows = { 70, 70, 70, 70 };
// يضيف شكل جدول إلى الشريحة
ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// يضبط تنسيق الحدود لكل خلية
for (IRow row : tbl.getRows())
{
for (ICell cell : row)
{
cell.getCellFormat().getBorderTop().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderTop().setWidth(5);
cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderBottom().setWidth(5);
cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderLeft().setWidth(5);
cell.getCellFormat().getBorderRight().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderRight().setWidth(5);
}
}
// يدمج الخلايا (1, 1) x (2, 1)
tbl.mergeCells(tbl.get_Item(1, 1), tbl.get_Item(2, 1), false);
// يدمج الخلايا (1, 2) x (2, 2)
tbl.mergeCells(tbl.get_Item(1, 2), tbl.get_Item(2, 2), false);
pres.save("MergeCells_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
بعد ذلك نقوم بدمج الخلايا أكثر بدمج (1, 1) و (1, 2). النتيجة هي جدول يحتوي على خلية مدمجة كبيرة في مركزه:
// ينشئ كائن من فئة Presentation التي تمثل ملف PPTX
Presentation pres = new Presentation();
try {
// يصل إلى الشريحة الأولى
ISlide sld = pres.getSlides().get_Item(0);
// يحدد الأعمدة بعرضها والصفوف بارتفاعها
double[] dblCols = { 70, 70, 70, 70 };
double[] dblRows = { 70, 70, 70, 70 };
// يضيف شكل جدول إلى الشريحة
ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// يضبط تنسيق الحدود لكل خلية
for (IRow row : tbl.getRows())
{
for (ICell cell : row)
{
cell.getCellFormat().getBorderTop().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderTop().setWidth(5);
cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderBottom().setWidth(5);
cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderLeft().setWidth(5);
cell.getCellFormat().getBorderRight().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderRight().setWidth(5);
}
}
// يدمج الخلايا (1, 1) x (2, 1)
tbl.mergeCells(tbl.get_Item(1, 1), tbl.get_Item(2, 1), false);
// يدمج الخلايا (1, 2) x (2, 2)
tbl.mergeCells(tbl.get_Item(1, 2), tbl.get_Item(2, 2), false);
// يدمج الخلايا (1, 1) x (1, 2)
tbl.mergeCells(tbl.get_Item(1, 1), tbl.get_Item(1, 2), true);
//يحفظ ملف PPTX على القرص
pres.save("MergeCells_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
الترقيم في خلية مقسمة
في الأمثلة السابقة، عندما تم دمج خلايا الجدول، لم يتغير نظام الترقيم في الخلايا الأخرى.
هذه المرة، نأخذ جدولًا عاديًا (جدول بدون خلايا مدمجة) ثم نحاول تقسيم الخلية (1,1) للحصول على جدول خاص. قد ترغب في إيلاء اهتمام للترقيم في هذا الجدول، الذي قد يبدو غريبًا. ومع ذلك، هذه هي الطريقة التي يقوم بها Microsoft PowerPoint بترقيم خلايا الجداول، وتقوم Aspose.Slides بالأمر نفسه.
يظهر لك هذا الكود بلغة Java العملية التي وصفناها:
// ينشئ كائن من فئة Presentation التي تمثل ملف PPTX
Presentation pres = new Presentation();
try {
// يصل إلى الشريحة الأولى
ISlide sld = pres.getSlides().get_Item(0);
// يحدد الأعمدة بأعرضها والصفوف بأارتفاعها
double[] dblCols = { 70, 70, 70, 70 };
double[] dblRows = { 70, 70, 70, 70 };
// يضيف شكل جدول إلى الشريحة
ITable tbl = sld.getShapes().addTable(100, 50, dblCols, dblRows);
// يضبط تنسيق الحدود لكل خلية
for (IRow row : tbl.getRows())
{
for (ICell cell : row)
{
cell.getCellFormat().getBorderTop().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderTop().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderTop().setWidth(5);
cell.getCellFormat().getBorderBottom().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderBottom().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderBottom().setWidth(5);
cell.getCellFormat().getBorderLeft().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderLeft().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderLeft().setWidth(5);
cell.getCellFormat().getBorderRight().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getBorderRight().getFillFormat().getSolidFillColor().setColor(Color.RED);
cell.getCellFormat().getBorderRight().setWidth(5);
}
}
// يدمج الخلايا (1, 1) x (2, 1)
tbl.mergeCells(tbl.get_Item(1, 1), tbl.get_Item(2, 1), false);
// يدمج الخلايا (1, 2) x (2, 2)
tbl.mergeCells(tbl.get_Item(1, 2), tbl.get_Item(2, 2), false);
// يقسم الخلية (1, 1)
tbl.get_Item(1, 1).splitByWidth(tbl.get_Item(2, 1).getWidth() / 2);
// يحفظ ملف PPTX على القرص
pres.save("SplitCells_out.pptx", SaveFormat.Pptx);
} finally {
if (pres != null) pres.dispose();
}
تغيير لون خلفية خلية الجدول
يعرض لك هذا الكود بلغة Java كيفية تغيير لون خلفية خلية الجدول:
Presentation presentation = new Presentation();
try {
ISlide slide = presentation.getSlides().get_Item(0);
double[] dblCols = { 150, 150, 150, 150 };
double[] dblRows = { 50, 50, 50, 50, 50 };
// إنشاء جدول جديد
ITable table = slide.getShapes().addTable(50, 50, dblCols, dblRows);
// تعيين لون الخلفية للخلية
ICell cell = table.get_Item(2, 3);
cell.getCellFormat().getFillFormat().setFillType(FillType.Solid);
cell.getCellFormat().getFillFormat().getSolidFillColor().setColor(Color.RED);
presentation.save("cell_background_color.pptx", SaveFormat.Pptx);
} finally {
if (presentation != null) presentation.dispose();
}
إضافة صورة داخل خلية جدول
- إنشاء كائن من الفئة Presentation class.
- الحصول على مرجع الشريحة عبر الفهرس الخاص بها.
- تحديد مصفوفة الأعمدة مع العرض.
- تحديد مصفوفة الصفوف مع الارتفاع.
- إضافة جدول إلى الشريحة عبر طريقة AddTable .
- إنشاء كائن
Imagesلاحتواء ملف الصورة. - إضافة صورة
IImageإلى كائنIPPImage. - ضبط
FillFormatلخلية الجدول إلىPicture. - إضافة الصورة إلى الخلية الأولى في الجدول.
- حفظ العرض التقديمي المعدل كملف PPTX
يعرض لك هذا الكود بلغة Java كيفية وضع صورة داخل خلية جدول عند إنشاء جدول:
// ينشئ كائنًا من فئة Presentation التي تمثل ملف PPTX
Presentation pres = new Presentation();
try {
// يصل إلى الشريحة الأولى
ISlide islide = pres.getSlides().get_Item(0);
// يحدد الأعمدة بعرضها والصفوف بارتفاعها
double[] dblCols = {150, 150, 150, 150};
double[] dblRows = {100, 100, 100, 100, 90};
// يضيف شكل جدول إلى الشريحة
ITable tbl = islide.getShapes().addTable(50, 50, dblCols, dblRows);
// إنشاء كائن IPPImage باستخدام ملف الصورة
IPPImage picture;
IImage image = Images.fromFile("image.jpg");
try {
picture = pres.getImages().addImage(image);
} finally {
if (image != null) image.dispose();
}
// يضيف الصورة إلى أول خلية في الجدول
ICellFormat cellFormat = tbl.get_Item(0, 0).getCellFormat();
cellFormat.getFillFormat().setFillType(FillType.Picture);
cellFormat.getFillFormat().getPictureFillFormat().setPictureFillMode(PictureFillMode.Stretch);
cellFormat.getFillFormat().getPictureFillFormat().getPicture().setImage(picture);
// يحفظ ملف PPTX على القرص
pres.save("Image_In_TableCell_out.pptx", SaveFormat.Pptx);
} catch (IOException e) {
} finally {
if (pres != null) pres.dispose();
}
الأسئلة الشائعة
هل يمكنني ضبط سماكات خطوط وأنماط مختلفة لجوانب مختلفة من خلية واحدة؟
نعم. حدود الـ top/bottom/left/right لها خصائص منفصلة، لذلك يمكن أن تختلف سماكة ونمط كل جانب. هذا منطقي بناءً على التحكم في حدود كل جانب للخلية كما هو موضح في المقال.
ماذا يحدث للصورة إذا قمت بتغيير حجم العمود/الصف بعد تعيين صورة كخلفية للخلية؟
السلوك يعتمد على fill mode (تمديد/تبليط). عند التمديد، تتكيف الصورة مع الخلية الجديدة؛ عند التبليط، تُعاد حساب البلاط. يذكر المقال أوضاع عرض الصورة داخل الخلية.
هل يمكنني تعيين ارتباط تشعبي لكامل محتوى الخلية؟
يتم تعيين Hyperlinks على مستوى النص (القطعة) داخل إطار نص الخلية أو على مستوى الجدول/الشكل بالكامل. عمليًا، تقوم بتعيين الرابط إلى قطعة أو إلى كل النص داخل الخلية.
هل يمكنني تعيين خطوط مختلفة داخل خلية واحدة؟
نعم. يدعم إطار نص الخلية portions (تشغيلات) تنسيقًا مستقلاً — عائلة الخط، النمط، الحجم، واللون.