通过Microsoft.Office.Interop.Excel确定Excel版本/文化
我怎样才能实现在.NET / C#中?
你可以使用下面的代码片段:(从我的一个项目中获取,所以不能保证不能工作)
Microsoft.Office.Interop.Excel.Application tExcel = new Application(); CultureInfo cSystemCulture = Thread.CurrentThread.CurrentCulture; CultureInfo cExcelCulture = new CultureInfo(tExcel.LanguageSettings.get_LanguageID( Microsoft.Office.Core.MsoAppLanguageID.msoLanguageIDUI)); try { Thread.CurrentThread.CurrentCulture = cExcelCulture; double tVersion; bool tParseSucceded = double.TryParse(tExcel.Version, out tVersion); // 12 is the first version with .xlsx extension if (tVersion > 11.5) cDefaultExtension = ".xlsx"; else cDefaultExtension = ".xls"; } catch (Exception aException) { cLogger.Debug("error retrieving excel version.", aException); cLogger.Error("error retrieving excel version."); } finally { Thread.CurrentThread.CurrentCulture = cSystemCulture; }
阅读你的app.config文件,因为它会把参考放在那里:
<compilation debug="false"> <assemblies> <add assembly="Office, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/> </assemblies> </compilation>
通过“阅读”,你可能不得不打开文件,阅读内容,因为我不认为你可以具体阅读组件。
void Method1() { string strEVersionSubKey = "\\Excel.Application\\CurVer"; //HKEY_CLASSES_ROOT/Excel.Application/Curver string strValue = null; string strVersion = null; RegistryKey rkVersion = null; rkVersion = Registry.ClassesRoot.OpenSubKey(strEVersionSubKey, false); strValue = (string)rkVersion.GetValue(string.Empty); strValue = strValue.Substring(strValue.LastIndexOf(".") + 1); switch (strValue) //Determine Version { case "7": strVersion = "95"; break; case "8": strVersion = "97"; break; case "9": strVersion = "2000"; break; case "10": strVersion = "2002"; break; case "11": strVersion = "2003"; break; case "12": strVersion = "2007"; break; case "14": strVersion = "2010"; break; case "15": strVersion = "2013"; break; case "16": strVersion = "2016"; break; } MessageBox.Show("Excel " + strVersion + " Installed!"); }