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 + "<=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表格文件