C# Microsoft.Office.Interop.Excel.Application-调用不同版本的Excel

C# Microsoft.Office.Interop.Excel.Application-调用不同版本的Excel,c#,excel,excel-2010,office-interop,excel-2016,C#,Excel,Excel 2010,Office Interop,Excel 2016,我有以下问题: var oExcelApp = new Microsoft.Office.Interop.Excel.Application(); 在这台机器上,这将启动Excel 2016,但是我的机器上同时安装了Excel 2010和Excel 2016。我想改为从2010年开始,我想在我的机器上安装2010年和2016年 据报道,这是不可能的。但是,我的理解是,您可以使用: (将Excel 2010注册为默认应用程序) 但是,当我运行此命令时,它所做的只是打开excel,没有观察到所需的

我有以下问题:

var oExcelApp = new Microsoft.Office.Interop.Excel.Application();
在这台机器上,这将启动Excel 2016,但是我的机器上同时安装了Excel 2010和Excel 2016。我想改为从2010年开始,我想在我的机器上安装2010年和2016年

据报道,这是不可能的。但是,我的理解是,您可以使用:

(将Excel 2010注册为默认应用程序)

但是,当我运行此命令时,它所做的只是打开excel,没有观察到所需的效果。有没有办法做到这一点,也许是通过某种方式?还是引用另一个

更新1 我试过:

似乎也不起作用,忽略excel版本并运行2016,而不考虑。

似乎工作得很好。不确定“_Application”和“Application”之间的区别,但根据注释,“Application”是首选:

string pathToTheVersionOfExcel "...";
int amountOfTimeToWaitForFailure = 5000;

Process process = new Process();
process.StartInfo.FileName = pathToTheVersionOfExcel;
process.Start();

Thread.Sleep(amountOfTimeToWaitForFailure);

oExcelApp = (Application)Marshal.GetActiveObject("Excel.Application");

您需要启动一个进程,使用版本所需的EXE的路径,然后选择该进程进行互操作。请参阅Andrew Whitechapel的这篇非常有用的博客文章,我认为您需要将其转换为
(Excel.Application)
,而不仅仅是
应用程序
,因为它应该/可能指代运行此代码的C应用程序<代码>\应用程序vs
应用程序
请参见
var oExcelApp = (Microsoft.Office.Interop.Excel.Application)Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application.14"));
string pathToTheVersionOfExcel "...";
int amountOfTimeToWaitForFailure = 5000;

Process process = new Process();
process.StartInfo.FileName = pathToTheVersionOfExcel;
process.Start();

Thread.Sleep(amountOfTimeToWaitForFailure);

oExcelApp = (Application)Marshal.GetActiveObject("Excel.Application");