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

标签 .net excel interop marshalling unmanaged

我正在 .NET 应用程序(WPF,如果重要的话)中创建 Microsoft Excel 的实例,并将其嵌入其中,如下所示:

        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 指定一些参数才能启用加载项加载。但我不知道什么/如何...

最佳答案

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

关于.net - 以编程方式创建 Excel 实例并加载所有加载项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10312511/

相关文章:

c# - 来自 System.Windows.Forms 的 AccessViolationException,在 WPF 中使用 WinFormsHost

.net - 空的 PrimitiveList 被 DynamoDB 忽略

c# - 为什么 ImmutableArray.Create 复制现有的不可变数组?

excel - 从 UBound 到 LBound 循环数组并检查值

excel - 如何使用 Excel 或 Google 表格中的函数脚本将波斯语 (Shamsi) 日期转换为公历 (Miladi) 日期?

c# - 如何获取word文档封面的名字?

c# - 伙计,我的线程在哪里? (或 : rename a . NET 线程池线程 - 这可能吗?)

c# - 资源文件 (resx) 不遵守自定义工具命名空间

excel - 如何使用 Excel VBA 创建单位矩阵?

c# - 无法让 SAFEARRAY 与 Interop 一起工作