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 إلى MoveAndSize، واضبط خلايا الربط (UpperLeftRow، UpperLeftColumn، LowerRightRow، LowerRightColumn) بحيث تغطي الصورة خلية واحدة بالضبط.EmbeddedImage الخاصة بالخلية. تتدرج الصورة تلقائيًا لتلائم مساحة عرض الخلية وتنتقل معها.
يتناول باقي هذه المقالة كلا الأسلوبين، ويشرح واجهات برمجة التطبيقات ذات الصلة، ويوضح كيفية استخدامهما في التعليمات البرمجية.الصورة العائمة هي كائن Picture يعيش على طبقة الرسم في ورقة العمل. على الرغم من أنها ليست جزءًا من أي خلية واحدة، إلا أنها مرتبطة بنطاق من الخلايا. تحدد خلايا ربط الصورة — الزاوية العلوية اليسرى والسفلية اليمنى — امتدادها المرئي على ورقة العمل. افتراضيًا، تمتد الصورة المضافة حديثًا عبر عدة خلايا.
لجعل الصورة العائمة تغطي خلية واحدة بالضبط، تحتاج إلى:
Worksheet.Pictures.Add(int row, int column, Vector<uint8_t> stream)، والذي يربط الصورة الجديدة بالخلية المحددة.Picture.Placement إلى PlacementType.MoveAndSize بحيث تنتقل الصورة وتعيد تحجيمها مع الخلية الأساسية عندما يغير المستخدم عرض العمود أو ارتفاع الصف.يتم تعريف ربط الصورة بأربع خصائص فهرسة تبدأ من الصفر:
Picture.UpperLeftRow — فهرس الصف للحافة العلوية للصورة.Picture.UpperLeftColumn — فهرس العمود للحافة اليسرى للصورة.Picture.LowerRightRow — فهرس الصف للحافة السفلية للصورة. لجعل الحافة السفلية للصورة في أسفل الصف r، عيّن هذه القيمة إلى r + 1.Picture.LowerRightColumn — فهرس العمود للحافة اليمنى للصورة. لجعل الحافة اليمنى للصورة في يمين العمود c، عيّن هذه القيمة إلى c + 1.تعد فهارس الصفوف والأعمدة في Aspose.Cells مبنية على الصفر. الخلية C6 لها فهرس صف 5 وفهرس عمود 2. أخطاء الفرق بواحد في ربط الزاوية السفلية اليمنى هي المصدر الأكثر شيوعًا لظهور الصور متداخلة في خلية مجاورة.
Picture.Placement هو تعداد من نوع PlacementType يتحكم في كيفية تصرف الصورة عندما يعيد المستخدم تحجيم الصف أو العمود الذي تحتها. القيمة الموصى بها لصورة خلية واحدة هي PlacementType.MoveAndSize، والتي تتسبب في انتقال الصورة وإعادة تحجيمها معًا مع الخلية الأساسية، محافظةً على الملاءمة الدقيقة.
Workbook جديدًا (أو افتح مصنفًا موجودًا).Worksheet المستهدفة من workbook.GetWorksheets().Get(0].Vector<uint8_t> حتى تتوفر وحدات بايت الصورة لواجهة برمجة التطبيقات.worksheet.Pictures.Add(5, 2, imageData) لإضافة صورة مرتبطة بالخلية C6. احفظ مرجع Picture المُعاد.UpperLeftRow = 5، UpperLeftColumn = 2، LowerRightRow = 6، LowerRightColumn = 3.picture.Placement = PlacementType.MoveAndSize للحفاظ على محاذاة الصورة مع C6 عند تغيير حجم العمود أو الصف..xlsx.
يوضح الكود التالي الأسلوب الكامل.#include "Aspose.Cells.h"
#include <fstream>
#include <vector>
#include <iterator>
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
Workbook workbook;
Worksheet worksheet = workbook.GetWorksheets().Get(0);
std::ifstream fs("logo.png", std::ios::binary);
std::vector<uint8_t> stdData((std::istreambuf_iterator<char>(fs)),
std::istreambuf_iterator<char>());
fs.close();
Vector<uint8_t> imageData(reinterpret_cast<const uint8_t*>(stdData.data()),
static_cast<int32_t>(stdData.size()));
int picIndex = worksheet.GetPictures().Add(5, 2, imageData);
Picture picture = worksheet.GetPictures().Get(picIndex);
picture.SetUpperLeftRow(5);
picture.SetUpperLeftColumn(2);
picture.SetLowerRightRow(6);
picture.SetLowerRightColumn(3);
picture.SetPlacement(PlacementType::MoveAndSize);
workbook.Save(u"output.xlsx", SaveFormat::Xlsx);
Aspose::Cells::Cleanup();
return 0;
}
يعرض Aspose.Cells أيضًا آلية أبسط للصور المرتبطة بالخلايا: خاصية Cell.EmbeddedImage. يؤدي تعيين وحدات بايت الصورة إلى هذه الخاصية إلى إرفاق الصورة بالخلية نفسها، كما لو كانت محتوى داخليًا.
Cell.EmbeddedImage الخيار الأكثر إيجازًا عندما يكون هدفك ببساطة “صورة تعيش داخل هذه الخلية.”Workbook جديدًا (أو افتح مصنفًا موجودًا).Worksheet المستهدفة من workbook.GetWorksheets().Get(0].Vector<uint8_t>.worksheet.GetCells().Get("C6"] أو worksheet.GetCells().Get(5, 2].EmbeddedImage الخاصة بالخلية..xlsx.
يوضح الكود التالي الأسلوب الكامل.#include "Aspose.Cells.h"
#include <vector>
#include <fstream>
#include <iterator>
using namespace Aspose::Cells;
int main() {
Aspose::Cells::Startup();
Workbook wb;
Worksheet worksheet = wb.GetWorksheets().Get(0);
Cell cell = worksheet.GetCells().Get(u"C6");
// قراءة ملف الصورة في مصفوفة بايتات
std::ifstream file("logo.png", std::ios::binary);
std::vector<uint8_t> stdImageData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
file.close();
// تحويل std::vector إلى Aspose::Cells::Vector باستخدام مُنشئ المؤشر+الحجم
Vector<uint8_t> imageData(stdImageData.data(), (int32_t)stdImageData.size());
// تضمين الصورة مباشرة في الخلية
cell.SetEmbeddedImage(imageData);
// اختياريًا ضبط ارتفاع الصف وعرض العمود بحيث تكون الصورة المضمنة أكثر وضوحًا
worksheet.GetCells().SetColumnWidth(2, 30); // العمود C (الفهرس 2)
worksheet.GetCells().SetRowHeight(5, 100); // الصف 6 (الفهرس 5)
// حفظ المصنف الناتج كملف .xlsx
wb.Save(u"output.xlsx", SaveFormat::Xlsx);
Aspose::Cells::Cleanup();
return 0;
}
ينتج كلا الأسلوبين صورة تتناسب داخل خلية واحدة، لكنهما يختلفان في كيفية تخزين الصورة وكيفية تصرفها:
PictureCollection.Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.