تحميل الوظائف الإضافية عند مثيل اكسل برمجيا
-
03-07-2019 - |
سؤال
وأنا أحاول أن إنشاء مثيل جديد من 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")