我正在尝试在我的应用程序中启动具有特定参数的Microsoft Excel(即附加的xla和xll)。
现在它工作正常,因为我的所有用户只安装了Office11(= 2003)。
我的公司将转而使用Windows 7& Office 2010和我逻辑上无法启动任何Excel,因为.exe不在C:\Program Files:\Microsoft Office\Office11\EXCEL.EXE
我在注册表中快速检查一下,看看我肯定可以检查当前安装的版本。还有很多文章解释了如何获得当前安装的Office版本。
但是,我想知道是否有可能找到任何东西(例如一个好的注册表项)直接给我.exe路径以启动Excel。
使用我当前的机器(Win XP x86,Office11),我可以在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Excel\InstallRoot
找到它
使用此密钥,我基本上可以找到一种解决方法来获取实际路径。问题:安装了Office 2010(= Office 14)的Windows 7注册表中没有此类密钥。
你们有没有办法从C#启动当前安装的excel?
仅供参考,这是当前的代码部分,从x64 / x86机器启动Office11:
private void LaunchExcel(string arguments)
{
if (!Is64BitsOS())
{
Process process = new Process();
process.StartInfo.FileName = "excel";
process.StartInfo.Arguments = arguments;
process.Start();
}
else
{
Process process = new Process();
process.StartInfo.FileName = "c:/Program Files (x86)/Microsoft Office/Office11/excel.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.Arguments = arguments;
process.Start();
}
}
使这段代码更通用的任何想法?
答案 0 :(得分:2)
如果启动Excel以打开Excel文件,则可以使用Excel文件Process
启动FileName
,并让Windows shell执行所有工作以查找关联的应用程序。显然,你需要一个异常处理程序。
这将使您独立于Office和Windows版本以及注册表项。
否则,您可以采用不同的方法并找到相关的应用程序,例如here。
这些建议的重点是:目前,您必须在安装新的Office版本或使用其他Windows版本时立即更改代码,同时有办法避免这些依赖关系。
答案 1 :(得分:1)
在64位版本的Windows(XPx64,Vistax64,Win7x64)上运行的32位版本的Excel 2010将具有以下密钥。
我认为这是你正在寻找的关键
HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Excel\InstallRoot
在64位版本的Windows(XPx64,Vistax64,Win7x64)上运行的64位版本的Excel 2010将具有以下密钥
HKLM\SOFTWARE\Microsoft\Office\14.0\Excel\InstallRoot
从here
复制