我正在使用
[DllImport("Oleacc.dll")]
static extern int AccessibleObjectFromWindow(
int hwnd,
uint dwObjectID,
byte[] riid,
ref Excel.Window ptr);Run Code Online (Sandbox Code Playgroud)
使用他的句柄获取Excel实例,我从excel实例的进程ID获取.
这就是我使用这些功能时的样子
const uint OBJID_NATIVEOM = 0xFFFFFFF0;
Guid IID_IDispatch = new Guid("{00020400-0000-0000-C000-000000000046}");
Excel.Window ptr = null;
int hr = AccessibleObjectFromWindow(hwndChild, OBJID_NATIVEOM,
IID_IDispatch.ToByteArray(), ref ptr);
Object objApp = ptr.Application;Run Code Online (Sandbox Code Playgroud)
这种代码安静很有效,但唯一的问题是我必须添加对Office 2003主互操作程序集的引用.
正如你所看到的,函数中的最后一个参数是我需要添加对Pias的引用的原因,所以我的问题是如果有一种方法可以避免使用Interop程序集,我尝试过后期绑定但是也许我一直在做错,因为我无法让它发挥作用.
我正在尝试使用VBA创建一个新的Excel实例:
__CODE__
问题是这个新的Excel实例没有加载我正常打开Excel时加载的所有插件... Excel Application对象中是否有任何内容可以加载所有用户指定的插件?
我不是试图加载特定的加载项,而是让新的Excel应用程序表现得像用户自己打开它一样,所以我真的在寻找通常加载的所有用户选择的加载项的列表打开Excel时.
我有一个AddIn,我想从C#winforms应用程序通过Excel interop调用.
我无法加载插件等,除非我每次卸载并进行树脂安装(这很可能与Excel没有加载插件时使用interop -btw,无法让他们的示例在C#中工作).不幸的是,这对用户来说很慢并且很烦人,所以我需要简化它.
我想有一个Excel实例,但加载已安装的插件而不强制此安装/重新安装问题.
我搜索和搜索,但我在谷歌上找到的所有内容都提供了安装/重新安装的解决方案.还有其他方法吗?加载项已安装,我只想要excel加载它.
这就是我现在正在做的事情(取自google'd建议):
// loop over the add-ins and if you find it uninstall it.
foreach (AddIn addIn in excel.AddIns)
if (addIn.Name.Contains("My Addin"))
addin.Installed = false;
// install the addin
var addin = excel.AddIns.Add("my_addin.xll", false);
addin.Installed = true;
Run Code Online (Sandbox Code Playgroud) 我有一个ac#app,它需要创建一个excel应用程序,然后打开一个工作簿.问题是我需要在excel打开时加载Bloomberg addinn.我发现的唯一方法是在这个后期工作示例中.
这确实启动了excel并且能够使用Bloomberg功能.但是我想知道是否有办法将myXl转换为xlApp,其中xlApp的类型为Microsoft.Office.Interop.Excel.Application?
var myXl = Process.Start("excel.exe");
Run Code Online (Sandbox Code Playgroud)
原因是我有一个库,它有一些我希望使用的有用功能,但它需要一个类型为Microsoft.Office.Interop.Excel.Application的参数.我该怎么做呢?