Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
يوفر Aspose.Cells طريقتين متميزتين لربط صورة بخلية واحدة. الصورة العائمة هي شكل على طبقة الرسم في ورقة العمل يغطي بصريًا نطاقًا من الخلايا، بينما تُخزَّن الصورة المضمنة داخل الخلية نفسها وتتناسب تلقائيًا مع منطقة عرض الخلية. اختر الأسلوب الذي يناسب متطلبات التخطيط لديك.
يُعدّ احتواء صورة بدقة في خلية واحدة متطلبًا شائعًا عند تصميم جداول بيانات تعمل كتقارير بصرية أو كتالوجات منتجات أو أدلة موظفين أو لوحات معلومات أو قوائم جرد. بدلًا من تمديد صورة عبر عدة خلايا أو وضعها بشكل فضفاض على ورقة العمل، قد ترغب في صورة نظيفة مرتبطة بخلية تظل متوائمة مع الخلية التي تحتويها. يدعم Aspose.Cells هذا السيناريو بطريقتين متكاملتين:
Picture إلى ورقة العمل، وعيّن Placement إلى MOVE_AND_SIZE، واضبط خلايا الربط (getUpperLeftRow، وgetUpperLeftColumn، وgetLowerRightRow، وgetLowerRightColumn) بحيث تغطي الصورة خلية واحدة بالضبط.getEmbeddedImage() للخلية. تتناسب الصورة تلقائيًا مع منطقة عرض الخلية وتنتقل معها.
يتناول بقية هذا المقال كلا الأسلوبين، ويشرح واجهات API المعنية، ويوضح كيفية استخدامها في التعليمات البرمجية.الصورة العائمة هي كائن Picture يعيش على طبقة الرسم في ورقة العمل. وعلى الرغم من أنها ليست جزءًا من أي خلية واحدة، إلا أنها مرتبطة بنطاق من الخلايا. تحدد خلايا ربط الصورة — الزاويتان العلوية اليسرى والسفلية اليمنى — امتدادها البصري على ورقة العمل. بشكل افتراضي، تمتد الصورة المضافة حديثًا عبر عدة خلايا.
لجعل صورة عائمة تغطي خلية واحدة بالضبط، يلزم:
Worksheet.getPictures().add(int row, int column, InputStream stream)، والذي يربط الصورة الجديدة بالخلية المحددة.Picture.setPlacement() إلى PlacementType.MOVE_AND_SIZE حتى تتحرك الصورة وتُعيد تحجيمها مع الخلية الأساسية عند تغيير عرض العمود أو ارتفاع الصف بواسطة المستخدم.يُعرَّف ربط الصورة بأربع خصائص فهرسة تبدأ من الصفر:
Picture.getUpperLeftRow() — فهرس صف الحافة العلوية للصورة.Picture.getUpperLeftColumn() — فهرس عمود الحافة اليسرى للصورة.Picture.getLowerRightRow() — فهرس صف الحافة السفلية للصورة. لجعل الحافة السفلية للصورة تقع في أسفل الصف r، عيّن هذه القيمة إلى r + 1.Picture.getLowerRightColumn() — فهرس عمود الحافة اليمنى للصورة. لجعل الحافة اليمنى للصورة تقع في يمين العمود c، عيّن هذه القيمة إلى c + 1.فهارس الصفوف والأعمدة في Aspose.Cells تبدأ من الصفر. الخلية C6 لها فهرس صف 5 وفهرس عمود 2. تُعدّ أخطاء الانحراف بمقدار واحد في ربط الزاوية السفلية اليمنى المصدر الأكثر شيوعًا لظهور الصور وكأنها تتداخل مع خلية مجاورة.
يُرجع Picture.getPlacement() تعدادًا من النوع PlacementType يتحكم في كيفية تصرف الصورة عندما يُعيد المستخدم ضبط الصف أو العمود الذي يقع تحتها. القيمة الموصى بها لصورة خلية واحدة هي PlacementType.MOVE_AND_SIZE، والتي تتسبب في تحرك الصورة وتغيير حجمها مع الخلية الأساسية، محافظةً على الاحتواء الدقيق.
Workbook جديدًا (أو افتح ملفًا موجودًا).Worksheet المستهدف من workbook.getWorksheets().get(0).InputStream (مثل FileInputStream) باستخدام كتلة try-with-resources حتى يُغلق التدفق بشكل صحيح.worksheet.getPictures().add(5, 2, stream) لإضافة صورة مرتبطة بالخلية C6. احفظ مرجع Picture المُرجَع.setUpperLeftRow(5)، وsetUpperLeftColumn(2)، وsetLowerRightRow(6)، وsetLowerRightColumn(3).picture.setPlacement(PlacementType.MOVE_AND_SIZE) لإبقاء الصورة متوائمة مع C6 عند تغيير حجم العمود أو الصف..xlsx.
تُظهر التعليمات البرمجية التالية الأسلوب الكامل.import com.aspose.cells.*;
import java.io.FileInputStream;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
try (FileInputStream fs = new FileInputStream("logo.png"))
{
int picIndex = worksheet.getPictures().add(5, 2, fs);
Picture picture = worksheet.getPictures().get(picIndex);
picture.setUpperLeftRow(5);
picture.setUpperLeftColumn(2);
picture.setLowerRightRow(6);
picture.setLowerRightColumn(3);
picture.setPlacement(PlacementType.MOVE_AND_SIZE);
}
workbook.save("output.xlsx", SaveFormat.XLSX);
يوفر Aspose.Cells أيضًا آلية أبسط للصور المرتبطة بالخلايا: الطريقة Cell.setEmbeddedImage(byte[]). يُلحق تعيين وحدات بايت الصورة بهذه الخاصية الصورة بالخلية نفسها، كما لو كانت محتوى مضمّنًا.
setEmbeddedImage() الخيار الأكثر إيجازًا عندما يكون هدفك ببساطة “صورة تعيش داخل هذه الخلية”.Workbook جديدًا (أو افتح ملفًا موجودًا).Worksheet المستهدف من workbook.getWorksheets().get(0).byte[] (على سبيل المثال، بقراءة الملف عبر Files.readAllBytes() من java.nio.file).worksheet.getCells().get("C6") أو worksheet.getCells().get(5, 2).cell.setEmbeddedImage(bytes)..xlsx.
تُظهر التعليمات البرمجية التالية الأسلوب الكامل.import com.aspose.cells.*;
import java.nio.file.Files;
import java.nio.file.Paths;
Workbook workbook = new Workbook();
Worksheet worksheet = workbook.getWorksheets().get(0);
// الحصول على الخلية المستهدفة C6
Cell cell = worksheet.getCells().get("C6");
// قراءة ملف الصورة في مصفوفة بايتات
byte[] imageData = Files.readAllBytes(Paths.get("logo.png"));
// تضمين الصورة مباشرة في الخلية
cell.setEmbeddedImage(imageData);
// اختيارياً ضبط ارتفاع الصف وعرض العمود لجعل الصورة المضمنة أكثر وضوحاً
worksheet.getCells().setColumnWidth(2, 30); // العمود C (الفهرس 2)
worksheet.getCells().setRowHeight(5, 100); // الصف 6 (الفهرس 5)
// حفظ المصنف الناتج كملف .xlsx
workbook.save("output.xlsx", SaveFormat.XLSX);
يُنتج كلا الأسلوبين صورة تناسب خلية واحدة، لكنهما يختلفان في كيفية تخزين الصورة وكيفية تصرفها:
PictureCollection.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.