我编写了一个C# COM (自动化)插件,其中我正在使用运行在Windows7上的Excel2010 x64进行测试,它定义了许多用户定义的公式。让我们以一个UDF为例,它有两个字符串作为参数,首先用文字调用,然后用单元格引用调用:
=MyFunction("A","B")
=MyFunction(A1,B1)
如果“区域设置”=“英语”,那么这两者都有效。
如果将“区域设置”设置为“法语”并重新打开工作簿,Excel已将公式更改为:
=MyFunction("A";"B")
=MyFunction(A1;B1)
第一个(带有文字的)仍然有效。第二个代码现在执行而不是 work =它只是返回#VALUE!
,并且我的托管UDF代码甚至没有被调用(使用Visual 2010进行调试)。
为什么会这样呢?
发布于 2015-05-01 16:56:30
我不知道为什么这种行为会因地区的不同而有所不同,但无论如何:
UDF签名是这样的:
public object MyFunction(string arg1, string arg2)
{
然后,我只需在代码中使用arg1和arg2。正如我所说的,这适用于英语区域中的单元格引用。在法国地区,如果我将其重构为如下所示,它就能工作:
public object MyFunction(object ref1, object ref2)
{
string arg1 = (ref1 is Range) ? (string)((Range)ref1).Value : (string)ref1;
string arg2 = (ref2 is Range) ? (string)((Range)ref2).Value : (string)ref2;
这需要很多的改变.有人知道为什么英语设置允许类型转换在到达UDF之前发生吗?
发布于 2016-01-15 10:46:13
您需要显式地设置en-US文化,以便UDF在不同的地区正确工作。
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
在你的外接程序开始的某个地方
https://stackoverflow.com/questions/29989404
复制相似问题