通过Microsoft.Office.Interop.Excel确定Excel版本/文化

时间:2010-05-26 15:58:07

标签: c# .net excel office-interop

如何在.NET / C#中实现这一目标?

3 个答案:

答案 0 :(得分:7)

您可以使用此代码段:(取自我的某个项目,因此无法保证开箱即用)

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;
}

答案 1 :(得分:0)

阅读你的app.config文件,因为它会将引用放在那里:

<compilation debug="false">
    <assemblies>
        <add assembly="Office, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/>
    </assemblies>
</compilation>

通过“读取”,您可能必须打开文件并阅读内容,因为我认为您不能专门阅读程序集。

答案 2 :(得分:0)

 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!");



    }