إدراج صورة في خلية

مقدمة

تعد ملاءمة صورة بدقة لخلية واحدة مطلبًا شائعًا عند تصميم جداول البيانات التي تعمل كتقارير مرئية، أو كتالوجات منتجات، أو أدلة موظفين، أو لوحات معلومات، أو قوائم جرد. بدلًا من تمديد الصورة عبر عدة خلايا أو وضعها بشكل غير محكم على ورقة العمل، قد ترغب في صورة نظيفة ومرتبطة بخلية تظل محاذية للخلية التي تنتمي إليها.

تدعم Aspose.Cells هذا السيناريو بطريقتين متكاملتين:

  • الأسلوب 1 — وضع صورة عائمة فوق خلية. أضف Picture إلى ورقة العمل، واضبط Placement على MoveAndSize، واضبط خلايا الإرساء (UpperLeftRow، UpperLeftColumn، LowerRightRow، LowerRightColumn) بحيث تغطي الصورة خلية واحدة بالضبط.
  • الأسلوب 2 — تضمين صورة مباشرة في خلية. قم بتعيين وحدات بايت الصورة إلى خاصية EmbeddedImage الخاصة بالخلية. تتمدد الصورة تلقائيًا لتلائم منطقة عرض الخلية وتنتقل معها.

يشرح باقي هذه المقالة كلا الأسلوبين، ويستعرض واجهات برمجة التطبيقات ذات الصلة، ويوضح كيفية استخدامها في التعليمات البرمجية.

الأسلوب 1: وضع صورة فوق خلية

الصورة العائمة هي كائن Picture يوجد على طبقة الرسم في ورقة العمل. على الرغم من أنها ليست جزءًا من أي خلية واحدة، إلا أنها مُرساة في نطاق من الخلايا. تحدد خلايا الإرساء الخاصة بالصورة — الزاويتان العلوية اليسرى والسفلية اليمنى — مدى ظهورها بصريًا على ورقة العمل. افتراضيًا، تمتد الصورة المضافة حديثًا عبر عدة خلايا.

لجعل الصورة العائمة تغطي خلية واحدة بالضبط، تحتاج إلى:

  1. إضافة الصورة باستخدام Worksheet.Pictures.Add(int row, int column, Stream stream)، الذي يربط الصورة الجديدة بالخلية المحددة.
  2. تعيين خصائص الإرساء الأربعة بحيث يتطابق المستطيل المحيط بالصورة مع الخلية المستهدفة.
  3. تعيين Picture.Placement على PlacementType.MoveAndSize حتى تتحرك الصورة وتعيد تحجيمها مع الخلية الأساسية عندما يغير المستخدم عرض العمود أو ارتفاع الصف.

إرساء الصورة في خلية واحدة

يتم تعريف إرساء الصورة من خلال أربع خصائص فهرسة تبدأ من الصفر:

  • Picture.UpperLeftRow — فهرس الصف للحافة العلوية للصورة.
  • Picture.UpperLeftColumn — فهرس العمود للحافة اليسرى للصورة.
  • Picture.LowerRightRow — فهرس الصف للحافة السفلية للصورة. لجعل الحافة السفلية للصورة تقع في أسفل الصف r، اضبط هذا على r + 1.
  • Picture.LowerRightColumn — فهرس العمود للحافة اليمنى للصورة. لجعل الحافة اليمنى للصورة تقع في يمين العمود c، اضبط هذا على c + 1.

على سبيل المثال، لملاءمة الصورة بدقة في الخلية C6 (فهرس الصف 5، فهرس العمود 2)، اضبط UpperLeftRow = 5، وUpperLeftColumn = 2، وLowerRightRow = 6، وLowerRightColumn = 3.

التحكم في سلوك الموضع

Picture.Placement هو تعداد من نوع PlacementType يتحكم في كيفية تصرف الصورة عندما يغير المستخدم حجم الصف أو العمود الذي تحتها. القيمة الموصى بها لصورة خلية واحدة هي PlacementType.MoveAndSize، التي تتسبب في تحرك الصورة وإعادة تحجيمها معًا مع الخلية الأساسية لها، مع الحفاظ على الملاءمة الدقيقة.

إرشادات خطوة بخطوة

  1. أنشئ Workbook جديدًا (أو افتح مصنفًا موجودًا).
  2. الوصول إلى Worksheet المستهدف من workbook.Worksheets[0].
  3. افتح ملف الصورة من القرص في FileStream باستخدام كتلة using بحيث يتم التخلص من التدفق بشكل صحيح.
  4. استدعِ worksheet.Pictures.Add(5, 2, stream) لإضافة صورة مُرساة في الخلية C6. احصل على مرجع Picture المُعاد.
  5. عيّن إحداثيات الإرساء الأربعة بحيث تغطي الصورة الخلية C6 فقط: UpperLeftRow = 5، وUpperLeftColumn = 2، وLowerRightRow = 6، وLowerRightColumn = 3.
  6. عيّن picture.Placement = PlacementType.MoveAndSize للحفاظ على محاذاة الصورة مع C6 عند تغيير حجم العمود أو الصف.
  7. اختياريًا، أضف نصًا نموذجيًا إلى الخلايا المحيطة لإثبات أن الخلية C6 فقط هي التي تحتوي على الصورة.
  8. احفظ المصنف على القرص كملف .xlsx.

توضح التعليمات البرمجية التالية الأسلوب الكامل.

using System;
using System.IO;
using Aspose.Cells;
using Aspose.Cells.Drawing;

Workbook workbook = new Workbook();
Worksheet worksheet = workbook.Worksheets[0];

using (FileStream fs = new FileStream("logo.png", FileMode.Open, FileAccess.Read))
{
    int picIndex = worksheet.Pictures.Add(5, 2, fs);
    Picture picture = worksheet.Pictures[picIndex];
    picture.UpperLeftRow = 5;
    picture.UpperLeftColumn = 2;
    picture.LowerRightRow = 6;
    picture.LowerRightColumn = 3;
    picture.Placement = PlacementType.MoveAndSize;
}

workbook.Save("output.xlsx", SaveFormat.Xlsx);

الأسلوب 2: تضمين صورة مباشرة في خلية

توفر Aspose.Cells أيضًا آلية أبسط للصور المرتبطة بالخلايا: خاصية Cell.EmbeddedImage. يؤدي تعيين وحدات بايت الصورة على هذه الخاصية إلى إرفاق الصورة بالخلية نفسها، كما لو كانت محتوى مضمّنًا.

كيف تعمل الصور المدمجة

  • يتم تخزين الصورة كجزء من محتوى الخلية بدلاً من كونها شكلاً على طبقة الرسم.
  • تتمدد الصورة تلقائيًا لتلائم داخل حدود الخلية المعروضة. لا حاجة إلى إحداثيات إرساء أو إعدادات موضع.
  • تظل الخلية خلية حقيقية بعنوان حقيقي يمكن الإشارة إليه في الصيغ، أو فرزها كجزء من صف، أو استخدامها في عمليات أخرى على مستوى الخلية.

هذا يجعل Cell.EmbeddedImage الخيار الأكثر إيجازًا عندما يكون هدفك ببساطة “صورة تعيش داخل هذه الخلية”.

إرشادات خطوة بخطوة

  1. أنشئ Workbook جديدًا (أو افتح مصنفًا موجودًا).
  2. الوصول إلى Worksheet المستهدف من workbook.Worksheets[0].
  3. اقرأ ملف الصورة من القرص في مصفوفة byte[] (على سبيل المثال، باستخدام File.ReadAllBytes).
  4. احصل على مرجع للخلية المستهدفة — إما من خلال worksheet.Cells["C6"] أو worksheet.Cells[5, 2].
  5. عيّن مصفوفة البايتات لخاصية EmbeddedImage الخاصة بالخلية.
  6. اختياريًا، اضبط ارتفاع الصف وعرض العمود للصف والعمود المستهدفين لإعطاء الصورة المدمجة مظهرًا أكثر بروزًا.
  7. احفظ المصنف على القرص كملف .xlsx.

توضح التعليمات البرمجية التالية الأسلوب الكامل.

var workbook = new Workbook();
var worksheet = workbook.Worksheets[0];

// الحصول على الخلية المستهدفة C6
var cell = worksheet.Cells["C6"];

// قراءة ملف الصورة في مصفوفة بايتات
byte[] imageData = File.ReadAllBytes("logo.png");

// تضمين الصورة مباشرة في الخلية
cell.EmbeddedImage = imageData;

// اختيارياً ضبط ارتفاع الصف وعرض العمود لجعل الصورة المضمنة أكثر وضوحاً
worksheet.Cells.SetColumnWidth(2, 30);   // العمود C (الفهرس 2)
worksheet.Cells.SetRowHeight(5, 100);     // الصف 6 (الفهرس 5)

// حفظ المصنف الناتج كملف .xlsx
workbook.Save("output.xlsx", SaveFormat.Xlsx);

اختيار الأسلوب المناسب

ينتج كلا الأسلوبين صورة ملائمة داخل خلية واحدة، لكنهما يختلفان في كيفية تخزين الصورة وسلوكها:

  • استخدم صورة عائمة (الأسلوب 1) عندما:

    • تحتاج إلى تحكم أدق في الموضع أو الطبقات أو المحاذاة مع كائنات الرسم الأخرى.
    • تريد أن تتصرف الصورة كشكل يمكن تحديده، أو إعادة ترتيبه، أو تجميعه مع أشكال أخرى.
    • تتطلب توافقًا قديمًا مع التعليمات البرمجية التي تعمل بالفعل مع PictureCollection.
    • تحتاج إلى حساب إحداثيات الإرساء ديناميكيًا بناءً على تخطيط ورقة العمل.
  • استخدم صورة مدمجة (الأسلوب 2) عندما:

    • تريد أبسط إدراج ممكن لصورة في خلية.
    • يجب أن تنتقل الصورة مع الخلية مثل أي محتوى آخر للخلية.
    • لا تحتاج إلى معالجة الصورة كشكل.

مقالات ذات صلة