M365Con 2027 – مؤتمر مجاني عبر الإنترنت · 11–22 Jan 2027 · 120 sessions→ m365con.net

المدونة · Mirko Peters

الانتقال من VBA إلى Office Add-ins: لماذا يتمتع مطورو الويب بالأفضلية

By ·

لعقود من الزمن، كانت Visual Basic for Applications، المعروفة باسم VBA، الأداة الأبرز بلا منازع في أتمتة المكاتب. إذا أردت إنشاء نماذج مخصصة، أو أتمتة معالجة البيانات، أو إنشاء تقارير معقدة داخل Microsoft Excel أو Word، فقد كان VBA أداتك الأساسية. لكن الزمن تغيّر. ومع اعتماد المؤسسات لبنى تعتمد على السحابة أولاً، والتوافق بين المنصات، وأحدث أنظمة تطوير الويب، أصبحت وحدات الماكرو القديمة المرتبطة بس

Automatically translated with AI from the original post. Read the English original

▶ BLOGMigrating from VBA toOffice Add-ins: Why Web…M365.FM
Titelbild: Migrating from VBA to Office Add-ins: Why Web Developers Have the Advantage

منذ عقود، ظلّت Visual Basic for Applications، المعروفة اختصارًا باسم VBA، الأداة الأبرز بلا منازع في أتمتة المكتب. فإذا أردت بناء نماذج مخصصة، أو أتمتة معالجة البيانات، أو إنشاء تقارير معقدة داخل Microsoft Excel أو Word، كانت VBA أداتك الأساسية. لكن الزمن تغيّر. ومع تبنّي المؤسسات بنى تعتمد السحابة أولًا، وتوافق المنصات المختلفة، وأحدث حزم تطوير الويب، أصبحت وحدات الماكرو القديمة المرتبطة بسطح المكتب تشكّل بصورة متزايدة عائقًا من الديون التقنية.

إذا كنت مطوّر ويب حديثًا تعرف HTML وCSS وJavaScript، فأنت تملك في الواقع ميزة تنافسية كبيرة عند توسيع Microsoft 365. لستَ بحاجة إلى تعلّم لغة قديمة مرتبطة ببنية Windows. بدلًا من ذلك، يمكنك الاستفادة من حزمة تطوير الويب التي تمتلكها لبناء إضافات Office قوية وآمنة ومتعددة المنصات. دعنا نتعمق في أسباب كون الانتقال من VBA إلى Office Add-ins الحديثة الخيار الأذكى لمسيرتك المهنية ولمؤسستك.

ملخص سريع

إضافات Office هي تطبيقات ويب تعمل داخل Office. يتحكم ملف XML صغير في المواضع التي تظهر فيها، بينما تتيح واجهة برمجة تطبيقات Office JavaScript لشيفرتك قراءة المستندات وكتابتها بأمان. ابنِها مرة واحدة، وشغّلها على Windows وMac وOffice للويب، وأطلق التحديثات كأي تطبيق ويب حديث.

ما هي (وما ليست)

  • هي: HTML وCSS وJS (أو React أو Angular أو Vue) مستضافة على خادم الويب لديك، وتُعرض داخل Office كجزء من الجزء الجانبي للمهام، أو كإضافات محتوى، أو كأوامر.
  • ليست: ملفات ثنائية من نوع COM أو VSTO، ولا برامج تثبيت على مستوى الجهاز، ولا إضافات مرتبطة بنظام التشغيل. تُنشر التحديثات بإعادة نشر تطبيق الويب الخاص بك.

على خلاف VSTO (Visual Studio Tools for Office) القديمة أو إضافات COM التي كانت تتطلب برامج تثبيت معقدة على مستوى الجهاز، وتعديلات في السجل، وارتباطًا وثيقًا بأنظمة التشغيل المحلية، فإن إضافات Office الحديثة هي في جوهرها صفحات ويب مستضافة داخل عنصر متصفح آمن مدمج في Office. وهذا يعني أن خط نشرك يبدو تمامًا كنشر أي تطبيق ويب آخر.

المكونات الأساسية الثلاثة

  1. الملف الواصف (XML): المخطط الذي يحدد الموضع (الشريط/الأوامر)، والنطاق (Word/Excel)، والأذونات، وعناوين URL الخاصة بالمصدر SourceLocation.
  2. تطبيق الويب: واجهة المستخدم والمنطق، بأي حزمة تطوير للواجهة الأمامية، ويتواصل مع واجهاتك البرمجية.
  3. Office JS API: الجسر إلى بيانات المصنف والمستند (غير متزامنة، وتُستخدم من خلال الكائنات Office وExcel وWord).

الملف الواصف الأدنى (نموذج جاهز للنسخ واللصق)

<?xml version="1.0" encoding="UTF-8"?><OfficeApp xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="TaskPaneApp" Version="1.0.0.0" Id="00000000-0000-0000-0000-000000000001" ProviderName="Contoso" DefaultLocale="en-US" DisplayName DefaultValue="Contoso Reports"> <Hosts> <Host Name="Workbook"/> <Host Name="Document"/> </Hosts> <DefaultSettings> <SourceLocation DefaultValue="https://yourdomain.com/addin/index.html"/> </DefaultSettings> <Permissions>ReadWriteDocument</Permissions> <VersionOverrides xmlns="http://schemas.microsoft.com/office/appforoffice/1.1" xsi:type="VersionOverridesV1_0"> <Hosts> <Host xsi:type="Workbook"> <Ribbons> <Ribbon> <Tabs> <Tab id="Contoso.Tab" label="Contoso"> <Group id="Contoso.Group" label="Reports"> <Control id="Contoso.OpenPane" label="Open" type="Button" superTip="Open Contoso task pane" onAction="ContosoAction.OpenPane"/> </Group> </Tab> </Tabs> </Ribbon> </Ribbons> <Actions> <FunctionFile resid="Contoso.FunctionFile.Url"/> <Function Name="ContosoAction.OpenPane"/> </Actions> </Host> </Hosts> <Resources> <bt:Urls xmlns:bt="http://schemas.microsoft.com/office/officeappbasictypes/1.0"> <bt:Url id="Contoso.FunctionFile.Url" DefaultValue="https://yourdomain.com/addin/functions.html"/> </bt:Urls> </Resources> </VersionOverrides></OfficeApp>

استبدل SourceLocation وعناوين URL بالمضيف الخاص بك. أبقِ Permissions في أدنى حد ممكن (مثلاً ReadDocument) إلى أن تحتاج فعلاً إلى صلاحية الكتابة.

الكود الأساسي لـ Excel (Office.js)

// index.html includes: <script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>Office.onReady(() => { // Wire UI events, then…});async function writeMarkup() { await Excel.run(async (context) => { const sheet = context.workbook.worksheets.getActiveWorksheet(); const range = sheet.getRange("A1:B2"); range.values = [["Product", "Revenue"], ["Widgets", 125000]]; range.format.autofitColumns(); await context.sync(); });}async function readSelection() { await Excel.run(async (context) => { const range = context.workbook.getSelectedRange(); range.load("values,address"); await context.sync(); console.log("Selected:", range.address, range.values); });}

القواعد الأساسية

  • استخدم Excel.run(ctx => { …; return ctx.sync(); }) لتجميع العمليات وتطبيقها دفعة واحدة.
  • حمّل البيانات أولاً (range.load("props"))، ثم نفّذ await context.sync()، ثم اقرأ النتائج.
  • كل شيء غير متزامن، لذا اربط العمليات ببعضها بدلاً من إجراء تعديلات إجرائية على طريقة DOM.

الجزء الجانبي للمهام مقابل إضافات المحتوى

  • Task Pane: لوحة جانبية للواجهة؛ الأنسب للأدوات وعمليات البحث والعمليات على البيانات والأتمتة.
  • Content Add-in: يُعرض داخل المستند أو الورقة (مثل رسم مرئي مضمَّن أو خريطة أو بطاقة مؤشر أداء).
  • الأوامر: أزرار الشريط التي تفتح اللوحات أو تشغّل دوال JavaScript.

مسارات النشر

  • النشر المركزي (مركز الإدارة): التعيين حسب المستخدم أو المجموعة أو المستأجر.
  • مشاركة ملف البيان عبر الشبكة أو عنوان URL: التحميل الجانبي لأغراض التطوير والاختبار.
  • AppSource: السوق العامة (يتطلب الالتزام بمتطلبات الهوية البصرية والامتثال).

نصائح الأمان والحوكمة

  • مبدأ أقل الصلاحيات في <Permissions>.
  • استخدم CORS وCSP وHTTPS لجميع الملفات والموارد.
  • لا تخزّن الرموز المميزة (Tokens) في localStorage؛ وفضّل استخدام الجلسات والرموز قصيرة الأمد.
  • إذا كنت تستخدم تسجيل الدخول الموحّد (SSO)، فاربط Office SSO (مع تطبيق Entra) أو اعتمد PKCE/OAuth كبديل.
  • سجّل الإجراءات دون بيانات شخصية لتسهيل الدعم الفني، واحترم نهج منع فقدان البيانات (DLP) الخاصة بالمستأجر.

عمليات الربط مع Power Platform (إمكانات إضافية)

  • شغّل تدفقات Power Automate من اللوحة الخاصة بك (مثلاً “Submit to Finance”).
  • ضمّن بطاقات وتقارير Power BI في Task Pane.
  • استخدم Graph للوصول إلى بيانات M365 (البريد والملفات) عند الاقتضاء.

الأخطاء الشائعة وطرق معالجتها

  • لا يظهر شيء في الشريط: معرّفات ملف البيان أو مواقعه غير صحيحة، أو المضيف غير مناسب (مثلاً إضافة مخصصة لـ Word فقط تُشغَّل في Excel).
  • الكود "لا يفعل شيئًا": إما أن يكون Excel.run أو await context.sync() مفقودًا.
  • المصادقة تتعطل على Mac والويب: تأكد من السماح بطلبات المصدر المتعدد (cross-origin) وتدفقات SSO والنوافذ المنبثقة، واختبر جميع المضيفات.
  • أخطاء الأذونات: الإمكانية المطلوبة غير موجودة في ملف البيان (manifest)، مثل الكتابة دون ReadWriteDocument.

هيكل الملفات الأولي

/addin /public index.html functions.html styles.css /src app.js excel-actions.js manifest.xml

ابنِه هذا الأسبوع: قائمة تحقق من 5 خطوات

  1. الإعداد الأولي: أنشئ index.html، وأضف office.js، واعرض واجهة مستخدم بسيطة.
  2. ربط Excel: أضف عملية قراءة واحدة (للتحديد) وعملية كتابة واحدة (في A1:B2) عبر Excel.run.
  3. ملف البيان: اجعل SourceLocation يشير إلى ملف index.html الخاص بك، واضبط ReadDocument ليكون أولًا.
  4. التثبيت التجريبي: نفّذ تثبيتًا للتطوير (Office على الويب أو على سطح المكتب) وتحقق من زر الشريط وجزء المهام.
  5. التحصين: أضف معالجة للأخطاء، وقلّل الأذونات، واختبر على Mac والويب، ثم خطط للنشر المركزي.

الأسئلة المتداولة

س: هل أحتاج إلى خبرة في VBA أو VSTO؟
لا، فإضافات Office الحديثة تطبيقات ويب خالصة تعمل بواسطة Office JS، ومهارات تطوير الويب تنتقل إليها مباشرةً.

س: هل يمكن لقاعدة كود واحدة أن تعمل في كل مكان؟
نعم، على Windows وMac وOffice للويب (تحقق من الميزات حسب المضيف ومجموعات المتطلبات).

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

الخاتمة

تُعد إضافات Office الطريقة الأنظف لتحويل مهارات الويب إلى أتمتة فعلية لـ Excel وWord، فهي قابلة للنقل وقابلة للحوكمة وسريعة في الإطلاق. أتقن ملف البيان، والتزم بتدفق Office JS غير المتزامن، وستتخلص من كم هائل من التقارير اليدوية (ومن كثير من النسخ واللصق). لمعرفة المزيد عن تفعيل هذه الميزات دون الحاجة إلى VBA، لا تفُتك الحلقة المصاحبة من البودكاست: Build Office Add-Ins for Excel and Word Without VBA.

Entities in this article

Microsoft Excel HTTP JavaScript Technical debt Azure Functions Microsoft Agent skill React Visual Studio

Related articles

RSS