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

لماذا تستخدمون هذا الماكرو
يمكن أن تكون إحاطة الأحرف بفاصل مثل هذا مفيدة لإنشاء ملصقات زخرفية، أو إنشاء قيم عناصر نائبة مميزة بصرياً، أو إعداد البيانات للاستيراد إلى أنظمة تتوقع سلاسل مبطنة بمحددات. القيام بذلك يدوياً لمجموعة كبيرة من الخلايا أمر بطيء وعرضة للخطأ — بينما يتعامل الماكرو مع ذلك على الفور، وهو ذكي بما يكفي لتخطي الخلايا الفارغة والخلايا المحاطة بالفعل، بحيث يمكنكم إعادة تشغيله بأمان دون مضاعفة الشرطات.
بناء الماكرو
إليكم نظرة فاحصة على كل جزء من البرنامج النصي والدور الذي يلعبه.
الحصول على التحديد الحالي
يبدأ الماكرو بجلب نطاق الخلايا المحدد الذي قام المستخدم بتحديده حالياً:
let selection = Api.GetSelection();
selection.ForEach(function (cell) {
// ... تتم المعالجة هنا لكل خلية
});
تُرجع الدالة Api.GetSelection() نطاق الخلايا المحددة حالياً في الورقة، وتمر حلقة ForEach() عبر كل خلية فردية في ذلك النطاق، وتقوم بتشغيل وظيفة رد الاتصال مرة واحدة لكل استدعاء.
تخطي الخلايا الفارغة
قبل إجراء أي معالجة، يتحقق الماكرو مما إذا كانت الخلية تحتوي فعلياً على قيمة:
let cellValue = cell.GetValue();
if (cellValue === null || cellValue === undefined || cellValue === "") {
return;
}
تقرأ GetValue() المحتوى الحالي للخلية. إذا كانت الخلية فارغة (null، أو undefined، أو سلسلة فارغة)، تقوم الوظيفة ببساطة بالعودة مبكراً والانتقال إلى الخلية التالية، تاركة الخلايا الفارغة دون مساس.
تخطي الخلايا المحاطة بالفعل
نظراً لأننا نريد أن يكون الماكرو آمناً للتشغيل أكثر من مرة، فإنه يتحقق أيضاً مما إذا كانت الخلية قد تمت معالجتها بالفعل:
cellValue = String(cellValue);
if (/^---(?:.---)+$/.test(cellValue)) {
return;
}
يتم تحويل القيمة أولاً إلى سلسلة باستخدام طريقة String() حتى يمكن اختبارها بشكل آمن وتكرارها حرفاً بحرف. يطابق التعبير العادي /^—(?:.—)+$/ السلاسل التي تتبع النمط بالفعل — إذا طابقها، يتخطى الماكرو الخلية بدلاً من إحاطتها مرة ثانية.
إحاطة كل حرف بشرطات
هذا هو جوهر الماكرو، حيث يتم بناء السلسلة الجديدة حرفاً بحرف:
let sTemp = "---";
for (let c = 0; c < cellValue.length; c++) {
sTemp += cellValue.charAt(c) + "---";
}
يضيف كل تكرار للحلقة الحرف التالي من القيمة الأصلية، متبوعاً بـ “- – -“، مما يعيد بناء السلسلة تدريجياً مع إدراج شرطات بين كل حرف.
كتابة النتيجة مرة أخرى في الخلية
أخيراً، يتم حفظ السلسلة المبنية حديثاً مرة أخرى في الخلية:
cell.SetValue(sTemp);
كود الماكرو الكامل
(function () {
// الحصول على الخلية (الخلايا) المحددة حالياً في جدول البيانات
let selection = Api.GetSelection();
// المرور عبر كل خلية محددة
selection.ForEach(function (cell) {
// الحصول على القيمة الحالية للخلية
let cellValue = cell.GetValue();
// تخطي الخلايا الفارغة أو الخالية (null) أو غير المعرفة (undefined) — لا يوجد شيء لمعالجته
if (cellValue === null || cellValue === undefined || cellValue === "") {
return;
}
// التأكد من معاملة القيمة كسلسلة (في حال كانت رقماً، وما إلى ذلك)
cellValue = String(cellValue);
// تخطي الخلايا التي تطابق النمط بالفعل
if (/^---(?:.---)+$/.test(cellValue)) {
return;
}
// البدء في بناء القيمة الجديدة بـ "---" في البداية
let sTemp = "---";
// إحاطة كل حرف من القيمة الأصلية بفواصل "---"
for (let c = 0; c < cellValue.length; c++) {
sTemp += cellValue.charAt(c) + "---";
}
// كتابة القيمة المحولة مرة أخرى في الخلية
cell.SetValue(sTemp);
});
})();
الآن، دعونا نشغل الماكرو ونرى كيف يعمل!

كيفية استخدامه
- افتحوا جدول بيانات في محرر جداول البيانات ONLYOFFICE.
- حددوا نطاق الخلايا الذي تريدون تنسيقه.
- انتقلوا إلى عرض → وحدات الماكرو، وأنشئوا ماكرو جديداً، والصقوا الكود أعلاه.
- انقروا على تشغيل.
سيتم على الفور إحاطة كل خلية غير فارغة في تحديدكم بشرطات، بينما تُترك الخلايا الفارغة والخلايا المحاطة بالفعل دون مساس.
يعد هذا الماكرو مثالاً عملياً على كيف يمكن لأسطر قليلة من التعليمات البرمجية أن تتولى مهمة تنسيق متكررة كانت ستعني لولا ذلك تحرير الخلايا واحدة تلو الأخرى — ومن السهل بنفس القدر تكييفه لفواصل أو أنماط أخرى بخلاف الشرطات.
إذا كانت لديكم فكرة عن ماكرو ترغبون في رؤية تغطية له، أو طريقة لتحسين هذا الماكرو؟ توجهوا إلى فئة الماكرو في منتدى مجتمع ONLYOFFICE وشاركوا اقتراحكم — إنه أفضل مكان لطلب أمثلة ماكرو جديدة أو مناقشة الأفكار مع فريق ONLYOFFICE والمطورين الآخرين.
ONLYOFFICE ١. أنشئ حسابك المجاني من
،٢. قم بعرض و تحرير أو التعاون على المستندات، الجداول ، العروض التقديمية


