Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
تُعد ملاءمة صورة بدقة مع خلية واحدة متطلبًا شائعًا عند تصميم جداول بيانات تؤدي دور تقارير بصرية أو فهارس منتجات أو أدلة موظفين أو لوحات معلومات أو قوائم مخزون. بدلاً من تمديد صورة عبر خلايا متعددة أو وضعها على ورقة العمل دون ربطها بدقة، قد ترغب في صورة مرتبطة بالخلية ونظيفة تحافظ على محاذاتها مع الخلية التي تنتمي إليها. تدعم Aspose.Cells هذا السيناريو بطريقتين متكاملتين:
Picture إلى ورقة العمل، وحدِّد موضعه باستخدام picture.setPlacement(PlacementType.MoveAndSize)، واضبط خلايا ارتساء الصورة من خلال picture.setUpperLeftRow() وpicture.setUpperLeftColumn() وpicture.setLowerRightRow() وpicture.setLowerRightColumn() بحيث تغطي الصورة خلية واحدة بالضبط.Buffer يحتوي على بيانات الصورة إلى الخلية باستخدام cell.setEmbeddedImage(imageBuffer). تُحجَّم الصورة تلقائيًا لتلائم منطقة عرض الخلية وتنتقل مع الخلية.
يتناول بقية هذا المقال الأسلوبين، ويشرح واجهات برمجة التطبيقات (API) ذات الصلة، ويوضح كيفية استخدامها في التعليمات البرمجية.الصورة العائمة هي كائن Picture موجود في طبقة رسم ورقة العمل. وهي ليست جزءًا من أي خلية مفردة، لكنها مرتبطة بنطاق من الخلايا. خلايا ارتساء الصورة — أي ركنها الأيسر العلوي وركنها الأيمن السفلي — تحدد امتدادها المرئي على ورقة العمل. افتراضيًا، تمتد الصورة المضافة حديثًا عبر عدة خلايا.
لجعل صورة عائمة تغطي خلية واحدة بالضبط، عليك:
worksheet.getPictures().add(row, column, imageBuffer)، حيث يكون imageBuffer من نوع Buffer ويحتوي على بيانات الصورة. يربط هذا الاستدعاء الصورة الجديدة بالخلية المحددة.picture.setPlacement(PlacementType.MoveAndSize) حتى تتحرك الصورة وتُغيّر حجمها مع الخلية المرتبطة بها عندما يغيّر المستخدم عرض العمود أو ارتفاع الصف.تُحدَّد إحداثيات ارتساء الصورة بواسطة أربع دوال وصول ذات فهارس تبدأ من الصفر:
picture.getUpperLeftRow() وpicture.setUpperLeftRow(value) — فهرس الصف للحافة العلوية للصورة.picture.getUpperLeftColumn() وpicture.setUpperLeftColumn(value) — فهرس العمود للحافة اليسرى للصورة.picture.getLowerRightRow() وpicture.setLowerRightRow(value) — فهرس الصف للحافة السفلية للصورة. لجعل الحافة السفلية للصورة تقع عند أسفل الصف r، اضبط هذه القيمة على r + 1.picture.getLowerRightColumn() وpicture.setLowerRightColumn(value) — فهرس العمود للحافة اليمنى للصورة. لجعل الحافة اليمنى للصورة تقع عند الحد الأيمن للعمود c، اضبط هذه القيمة على c + 1.يستخدم كل من picture.getPlacement() وpicture.setPlacement(value) تعداد PlacementType للتحكم في سلوك الصورة عندما يغيّر المستخدم حجم الصف أو العمود الواقع تحتها. القيمة الموصى بها لصورة مرتبطة بخلية واحدة هي PlacementType.MoveAndSize، ما يجعل الصورة تتحرك وتُغيّر حجمها مع الخلية المرتبطة بها، مع الحفاظ على الملاءمة الدقيقة.
Workbook أو افتح مصنفًا موجودًا.Worksheet الهدف من خلال workbook.getWorksheets().getAt(0).Buffer، على سبيل المثال باستخدام fs.readFileSync في Node.js.worksheet.getPictures().add(5, 2, imageBuffer) لإضافة صورة مرتبطة بالخلية C6. تُرجع الطريقة فهرس الصورة الجديدة في مجموعة Pictures؛ استخدمه لاسترجاع Picture المقابلة.picture.setUpperLeftRow(5) وpicture.setUpperLeftColumn(2) وpicture.setLowerRightRow(6) وpicture.setLowerRightColumn(3).picture.setPlacement(PlacementType.MoveAndSize) للحفاظ على محاذاة الصورة مع C6 عند تغيير عرض العمود أو ارتفاع الصف..xlsx.
يوضح الكود التالي هذا الأسلوب بالكامل.<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example</h1>
<input type="file" id="fileInput" accept=".png,image/png" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: ["arial.ttf", "NotoSansSC-Regular.ttf"]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const file = fileInput.files[0];
if (!file) {
document.getElementById('result').innerHTML =
'<p style="color: red;">Please select a PNG image.</p>';
return;
}
const workbook = new Workbook();
const worksheet = workbook.worksheets.get(0);
const imageData = new Uint8Array(await file.arrayBuffer());
const picIndex = worksheet.pictures.add(5, 2, imageData);
const picture = worksheet.pictures.get(picIndex);
picture.upperLeftRow = 5;
picture.upperLeftColumn = 2;
picture.lowerRightRow = 6;
picture.lowerRightColumn = 3;
picture.placement = AsposeCells.Drawing.PlacementType.MoveAndSize;
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = "output.xlsx";
downloadLink.style.display = "block";
document.getElementById('result').innerHTML =
'<p style="color: green;">Done! Click the download link to get the result file.</p>';
});
</script>
</html>
تتيح Aspose.Cells أيضًا آلية أبسط للصور المرتبطة بالخلايا: طريقة cell.setEmbeddedImage(imageBuffer). وعند إسناد بيانات الصورة بهذه الطريقة، تُرفق الصورة بالخلية نفسها، كما لو كانت عنصرًا مضمَّنًا داخلها.
cell.setEmbeddedImage(imageBuffer) الخيار الأكثر إيجازًا عندما يكون هدفك ببساطة «صورة توجد داخل هذه الخلية».Workbook أو افتح مصنفًا موجودًا.Worksheet الهدف من خلال workbook.getWorksheets().getAt(0).Buffer، على سبيل المثال باستخدام fs.readFileSync في Node.js.worksheet.getCells().get("C6") أو worksheet.getCells().get(5, 2).Buffer إلى الخلية باستخدام cell.setEmbeddedImage(imageBuffer)..xlsx.
يوضح الكود التالي هذا الأسلوب بالكامل.<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example</h1>
<input type="file" id="fileInput" accept=".png,.jpg,.jpeg" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook } = AsposeCells;
const asposeReady = AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: ["arial.ttf", "NotoSansSC-Regular.ttf"]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
const downloadLink = document.getElementById('downloadLink');
const result = document.getElementById('result');
if (!fileInput.files || fileInput.files.length === 0) {
result.innerHTML = '<p style="color: red;">Please select an image file.</p>';
return;
}
const workbook = new Workbook();
const worksheet = workbook.worksheets.get(0);
// الحصول على الخلية الهدف C6
const cell = worksheet.cells.get("C6");
// قراءة ملف الصورة إلى مصفوفة بايتات
const imageData = new Uint8Array(await fileInput.files[0].arrayBuffer());
// تضمين الصورة مباشرة في الخلية
cell.embeddedImage = imageData;
// اختياريًا، اضبط ارتفاع الصف وعرض العمود لتكون الصورة المضمّنة أكثر وضوحًا
worksheet.cells.setColumnWidth(2, 30); // العمود C (الفهرس 2)
worksheet.cells.setRowHeight(5, 100); // الصف 6 (الفهرس 5)
// حفظ المصنف الناتج كملف .xlsx
const outputData = workbook.save(AsposeCells.SaveFormat.Xlsx);
const blob = new Blob([outputData]);
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = "output.xlsx";
downloadLink.style.display = "block";
result.innerHTML = '<p style="color: green;">Done! Click the download link to get the result file.</p>';
});
</script>
</html>
ينتج كلا الأسلوبين صورة تناسب خلية واحدة، لكنهما يختلفان في طريقة تخزين الصورة وسلوكها:
Pictures التي يتم الوصول إليها عبر worksheet.getPictures().Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.