动态加载所有COM类型的Excel?

Bit*_*lue 3 c# com excel interop

我想探索动态使用Excel的这条路径.


我想在我的C#应用​​程序中使用Excel而不包括dll和东西.我会先检查是否安装了所需的Excel版本并运行它.

首先,我想得到我需要的所有类型,但我无法掌握它们:

// works
Type typeExcel = Type.GetTypeFromProgID("Excel.Application");
object excel = Activator.CreateInstance(typeExcel);
object workbooks = typeExcel.InvokeMember("Workbooks", BindingFlags.GetProperty, null, excel, null);

// this doesn't work, returns null
Type typeWorkbooks = Type.GetTypeFromProgID("Excel.Workbooks");
Run Code Online (Sandbox Code Playgroud)

没有正确的类型,我无法调用成员.那么我做错了什么?如何加载我需要的所有类型并知道它们在那里?我目前的Excel版本是2003.


原因:如果我包含未安装在目标系统上的COM库,我的应用程序将无法启动.如果我动态加载它们,我可以检查它们是否存在并通知用户缺少功能.

GSe*_*erg 7

使用dynamic.

Type typeExcel = Type.GetTypeFromProgID("Excel.Application");

dynamic excel = Activator.CreateInstance(typeExcel);
excel.Visible = true;

dynamic workbooks = excel.Workbooks;
workbooks.Add();
workbooks.Add();
Run Code Online (Sandbox Code Playgroud)

另见这个答案.