سؤال

وأنا أحاول أن إنشاء مثيل جديد من Excel باستخدام VBA باستخدام:

وSet XlApp = New Excel.Application

والمشكلة هي أن هذا مثيل جديد من Excel لا يتم تحميل كافة الوظائف الإضافية التي يتم تحميلها عند فتح إكسل عادة ... هل هناك أي شيء في الكائن تطبيق Excel لتحميل في جميع الوظائف الإضافية المحددة من قبل المستخدم؟

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

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

المحلول

وكنت قد بحثت في هذه المشكلة مرة أخرى، وجمع Application.Addins يبدو أن جميع الوظائف الإضافية المدرجة في قائمة أدوات> الوظائف الإضافية، مع قيمة منطقية تفيد أم لا تم تثبيت الدين. وذلك ما يبدو أن العمل بالنسبة لي الآن هو حلقة من خلال جميع الوظائف الإضافية وإذا .Installed = صحيح ثم أنا وضعت .Installed إلى خطأ والعودة إلى صحيح، والذي يبدو لتحميل بشكل صحيح الوظائف الإضافية الخاصة بي.

Function ReloadXLAddins(TheXLApp As Excel.Application) As Boolean

    Dim CurrAddin As Excel.AddIn

    For Each CurrAddin In TheXLApp.AddIns
        If CurrAddin.Installed Then
            CurrAddin.Installed = False
            CurrAddin.Installed = True
        End If
    Next CurrAddin

End Function

نصائح أخرى

وعن طريق CreateObject("Excel.Application") سيكون له نفس النتيجة باستخدام New Excel.Application، للأسف.

وسيكون لديك لتحميل الوظائف الإضافية التي تحتاجها بشكل فردي عن طريق مسار الملف واسم باستخدام طريقة Application.Addins.Add(string fileName).

وأنا أغادر هذه الإجابة هنا لأي شخص آخر واجهت هذه المشكلة، ولكن باستخدام جافا سكريبت.

وخلفية قليلا ... في الشركة التي أعمل لدينا تطبيق ويب 3rd الطرف التي تستخدم جافا سكريبت لإطلاق Excel و إنشاء جدول بيانات على الطاير. كما أن لدينا الإضافية Excel الذي يتجاوز سلوك زر حفظ. الوظيفة الإضافية يتيح لك خيار حفظ الملف محليا أو في نظام إدارة الوثائق على شبكة الإنترنت.

وبعد أن ترقية إلى ويندوز 7 وأوفيس 2010، لاحظنا مشكلة مع التطبيق على شبكة الانترنت لتوليد البيانات. عندما ولدت جافا سكريبت جدول بيانات في Excel، فجأة على زر حفظ لم يعد يعمل. سوف النقر فوق حفظ وشيئا لم يحدث.

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

function GenerateSpreadsheet()
{
    var ExcelApp = getExcel();
    if (ExcelApp == null){ return; }

    reloadAddIn(ExcelApp);

    ExcelApp.WorkBooks.Add;
    ExcelApp.Visible = true;
    sheet = ExcelApp.ActiveSheet;

    var now = new Date();
    ExcelApp.Cells(1,1).value = 'This is an auto-generated spreadsheet, created using Javascript and ActiveX in Internet Explorer';

    ExcelApp.ActiveSheet.Columns("A:IV").EntireColumn.AutoFit; 
    ExcelApp.ActiveSheet.Rows("1:65536").EntireRow.AutoFit;
    ExcelApp.ActiveSheet.Range("A1").Select;

    ExcelApp = null;
}

function getExcel() {
   try {
       return new ActiveXObject("Excel.Application");
   } catch(e) {
       alert("Unable to open Excel. Please check your security settings.");
       return null;
   }
}

function reloadAddIn(ExcelApp) {
    // Fixes problem with save button not working in Excel,
    // by reloading the add-in responsible for the custom save button behavior
    try {
        ExcelApp.AddIns2.Item("AddInName").Installed = false;
        ExcelApp.AddIns2.Item("AddInName").Installed = true;
    } catch (e) { }
}

وجرب:

وSet XlApp = CreateObject("Excel.Application")

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