以编程方式创建Excel实例并加载所有加载项

时间:2012-04-25 09:04:35

标签: .net excel interop marshalling unmanaged

我在.NET应用程序中创建了一个Microsoft Excel实例(WPF,如果它很重要),我将它嵌入到这里:

        var excelType = Type.GetTypeFromProgID("Excel.Application");
        var excelObj = Activator.CreateInstance(excelType);
        excelType.InvokeMember("Visible", BindingFlags.SetProperty, null, excelObj, new object[] { true }, ComCulture);
        var excelHwnd = new IntPtr((int)excelType.InvokeMember("Hwnd", BindingFlags.GetProperty, null, excelObj, new object[0], ComCulture));
        var managedWindowHwnd = new WindowInteropHelper(Application.Current.MainWindow).Handle;
        SetParent(excelHwnd, managedWindowHwnd);
        MoveWindow(excelHwnd, 0, 0, Convert.ToInt32(Width), Convert.ToInt32(Height), true);

除Excel之外的所有工作都不会加载安装的加载项。如果我通过开始菜单运行Excel,则会加载加载项。

我想我需要为Excel指定一些参数来启用加载项加载。但我不知道是什么/如何......

1 个答案:

答案 0 :(得分:0)

您可以使用互操作手动执行此操作,您可以参考我在Get the excel cell address from a UDF的帖子来获取excel的Application对象。获得应用程序后,您可以通过循环遍历application.AddIns和application.ComAddIns并将每个项目的安装/连接属性设置为true来手动启用插件