Interop.Excel 本地化和 Range.Formula 与 Formulalocal

Posted

技术标签:

【中文标题】Interop.Excel 本地化和 Range.Formula 与 Formulalocal【英文标题】:Interop.Excel localization and Range.Formula vs Formulalocal 【发布时间】:2015-12-21 09:12:12 【问题描述】:

我正在尝试使用 Interop.Excel 生成 excel 文件,但我有 2 个本地化版本需要在其中运行我的 WPF 应用程序。

de-DE 和 en-US

对于本地化 de-DE,我的程序运行良好(我的笔记本电脑上也安装了 DE MS Office),但是当我尝试在 en-US 服务器上运行它时,我遇到了问题。

这是一个sn-p的源代码:

cell = "K" + rowCounter;          
Excel.Range ThisRange = xlWorkSheet.get_Range(cell, System.Type.Missing);
string myFunction;           

if (Thread.CurrentThread.CurrentUICulture.IetfLanguageTag == "de-DE")
   
    myFunction = "=+WENN(I" + rowCounter + "<=J" + rowCounter + ";J" + rowCounter + "-I" + rowCounter + ";\"24:00\"+(J" + rowCounter + "-I" + rowCounter + "))";

    ThisRange.FormulaLocal = myFunction;         
   
else
   
    myFunction = "=+IF(I" + rowCounter + "<=J" + rowCounter + ";J" + rowCounter + "-I" + rowCounter + ";\"24:00\"+(J" + rowCounter + "-I" + rowCounter + "))";

    ThisRange.Formula = myFunction;
   

而且我总是遇到这种异常:

异常:System.Runtime.InteropServices.COMException (0x800A03EC):来自 HRESULT 的异常:System.RuntimeType.ForwardCallToInvokeMember 的 0x800A03EC(字符串成员名称,BindingFlags 标志,对象目标,Int32 [] aWrapperTypes,MessageData 和 msgData)在 Microsoft.Office。 Interop.Excel.Range.set_Formula(对象值)

当识别到不同的本地化时,我还尝试将本地化更改为 de-DE - 没有帮助。

请问您知道可能出了什么问题吗?

提前谢谢你。

【问题讨论】:

Range.Formula 在 en_us 中始终使用公式表示法。所以函数名称是英文,但参数分隔符是逗号而不是分号。试试myFunction = "=+IF(I" + rowCounter + "&lt;=J" + rowCounter + ",J" + rowCounter + "-I" + rowCounter + ",\"24:00\"+(J" + rowCounter + "-I" + rowCounter + "))";。顺便提一句。因为 Range.Formula 在 en_us 中总是使用公式表示法,所以不需要区分语言环境。 【参考方案1】:

根据 Axel 的评论,问题出在分隔符中:

Range.formula 需要 Range.formulalocal 需要

我已经在我的源代码中修复了这个问题,现在它可以正常工作了。

【讨论】:

以上是关于Interop.Excel 本地化和 Range.Formula 与 Formulalocal的主要内容,如果未能解决你的问题,请参考以下文章

《C#零基础入门之百识百例》(九十六)本地数据交互 -- 读写Excel表格文件

《C#零基础入门之百识百例》(九十六)本地数据交互 -- 读写Excel表格文件

C#,Microsoft interop,Excel数字格式问题

如何使用c#访问excel中的隐藏列

Excel 互操作在我的数字格式字符串中添加斜杠

vsto笔记(old)