以编程方式实例化 Excel 时加载插件
-
03-07-2019 - |
题
我正在尝试使用 VBA 创建一个新的 Excel 实例:
Set XlApp = New Excel.Application
问题是,这个新的 Excel 实例不会加载我正常打开 Excel 时加载的所有加载项...Excel 应用程序对象中是否有任何内容可以加载所有用户指定的加载项?
我并不是试图加载特定的加载项,而是使新的 Excel 应用程序的行为就像用户自己打开它一样,因此我实际上正在寻找通常加载的所有用户选择的加载项的列表打开 Excel 时。
解决方案
我再次研究了这个问题,Application.Addins 集合似乎包含了“工具”->“插件”菜单中列出的所有插件,并带有一个布尔值,说明是否安装了插件。所以现在对我有用的是循环遍历所有插件,如果 .Installed = true 那么我将 .Installed 设置为 False 并返回 True,这似乎可以正确加载我的插件。
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
的结果相同。
您必须按文件路径&amp ;;单独加载所需的Addins。使用 Application.Addins.Add(string fileName)
方法命名。
我将这个答案留给其他遇到此问题但使用JavaScript的人。
一点背景......在我的公司,我们有一个第三方网络应用程序,它使用JavaScript来启动Excel并动态生成电子表格。我们还有一个Excel加载项,它会覆盖“保存”按钮的行为。该加载项使您可以选择在本地或在我们的在线文档管理系统中保存文件。
我们升级到Windows 7和Office 2010后,发现我们的电子表格生成网络应用程序存在问题。当JavaScript在Excel中生成电子表格时,突然“保存”按钮不再起作用。你会点击保存而没有任何事情发生。
使用其他答案,我能够用JavaScript构建解决方案。基本上我们会在内存中创建Excel Application对象,然后重新加载特定的加载项以恢复我们的保存按钮行为。这是我们修复的简化版本:
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) { }
}
尝试:
设置XlApp = CreateObject(" Excel.Application")