سؤال

أقوم بتطوير خادم COM ليتم استخدامه من Excel VBA. عندما أقوم بتحديث الخادم (تحرير الرمز ، يبدو أن unregister ، register) excel يستمر باستخدام الإصدار الأصلي من خادم com ، وليس الإصدار المحدث. الطريقة الوحيدة التي وجدتها لجعلها تستخدم الإصدار المحدث هي إغلاق وإعادة فتح Excel ، والتي تزداد تهيجًا بعض الشيء. هل هناك طريقة لإجبار Excel على استخدام الإصدار المسجل حديثًا (ربما نوع من خيار "Clear Cache")؟

المزيد من التفاصيل:

يتم تطوير الخادم في Python باستخدام Win32Com.

في VBA أفعل شيئًا مثل:

set obj=CreateObject("Foo.Bar")
obj.baz()

حيث Foo.Bar هو خادم com الذي سجلته في السجل.

إذا قمت بإلغاء تسجيل الخادم ثم قم بتشغيل رمز VBA ، فأنا أحصل على خطأ "لا يمكن إنشاء كائن" من VBA ، لذلك يجب أن يدرك أن هناك شيئًا ما يحدث. ولكن بمجرد أن أقوم بإعادة توجيه الإصدار القديم.

أي تلميحات موضع تقدير!

شكرًا،

أندي

هل كانت مفيدة؟

المحلول

لقد وجدت حلاً لمشكلتي - الفكرة العامة هي إعداد الأشياء بحيث تقوم فئة COM Server الرئيسية بتحميل بقية رمز خادم COM عند استدعاءها. لذا في Python ، قمت بإنشاء فئة Com Server التي تشبه:

import main_code

class COMInterface:
    _public_methods_ = [ 'method1' ]
    _reg_progid_ = "My.Test"
    _reg_clsid_ = "{D6AA2A12-A5CE-4B6C-8603-7952B711728B}"

    def methods(self, input1,input2,input3):
        # force python to reload the code that does the actual work 
        reload(main_code)
        return main_code.Runner().go(input1,input2,input3)

تحتوي وحدة Main_Code على الكود الذي يقوم بالعمل الفعلي ويتم إعادة تحميله في كل مرة يتم فيها تسمى طريقة COM. هذا يعمل طالما لا تتغير المدخلات. من المفترض أن تكون هناك عقوبة وقت تشغيل لهذا ، لذلك قد ترغب في إزالة إعادة التحميل للنسخة النهائية ، ولكنها تعمل لأغراض التطوير.

نصائح أخرى

مجرد اقتراح ، هل حاولت تفريغ الكائن؟ ربما قم بإنشاء زر في Excel spredsheat الذي يجبره على تفريغ الكائن.

اتمني ان يكون مفيدا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top