Cultureinfo不匹配导致Excel Automation失败

时间:2010-10-05 19:24:13

标签: c# excel automation cultureinfo

我使用interop在C#中打开Excel文件。我当前遇到的问题是,如果我安装的Excel是英语,为了开始工作,我必须将LocalSettings设置为英语。它会失败这两个不匹配。

我发现这是一个已知问题http://support.microsoft.com/kb/320369。但是,我无法始终将线程cultureinfo设置为英语,因为我无法控制用户安装的Excel版本。看起来唯一的解决方案是找出已安装的Excel的语言设置,并确保两个当前线程cultureinfo是相同的。但是,我无法从安装的Excel中获得正确的语言设置。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

无法直接回答您的问题,但我最近已转移到NPOI进行所有C#Excel编程。

这是一个非常好的库,并且不需要在服务器上安装Excel,并生成本机,我在不到一天的时间内就开始加速。

它仅适用于Excel 2003文件,文档并不出色。但是,它附带了一整套示例,显示了许多预期的用例。

鉴于您的问题的性质,以及NPOI对Excel安装的零要求,NPOI可能不关心EnglishSettings。

答案 1 :(得分:1)

检查注册表的另一个选择是使用以下方法从excel应用程序中检索语言:

New System.Globalization.CultureInfo(
    ExcelApp.LanguageSettings.LanguageID(Office.MsoAppLanguageID.msoLanguageIDUI))

这需要引用Office.dll v14.0

答案 2 :(得分:0)

一个选项可能是检查注册表中已安装语言包的版本。下面的Technet博客有更多信息,请参阅文章末尾有关注册表项的信息。

http://blogs.technet.com/b/office_resource_kit/archive/2010/04/02/how-to-determine-which-2007office-system-languages-are-installed.aspx

从以上链接:

HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Common\LanguageResources LanguageResources包括以下注册表项:

  • InstallLanguage 表示主要编辑语言。
  • InstalledUIs 提供计算机上所有可用UI语言的列表。
  • UILanguage 表示Office中用户界面的默认显示语言。
  • EnabledLanguages 表示Office中启用的特定于语言的功能的区域设置标识符(LCID)。

Windows操作系统使用LCID识别Windows注册表中的语言。有关语言标识符的列表,请参阅2007 Office system中的语言标识符(http://technet.microsoft.com/en-us/library/cc179219.aspx)。