如果区域设置已更改,则UDF不能与单元格引用一起使用

时间:2015-05-01 15:03:58

标签: c# excel localization excel-addins udf

我编写了一个C#COM(自动化)插件,我在Excel 7 x64上测试,在Windows 7上运行。它定义了许多用户定义的公式。让我们举一个带有两个字符串作为参数的UDF示例,首先使用文字调用,然后使用单元格引用:

=MyFunction("A","B")
=MyFunction(A1,B1)

如果区域设置=英语,那么这两个都有效。

如果我将“区域设置”设置为“法语”并重新打开工作簿,则Excel已将公式更改为:

=MyFunction("A";"B")
=MyFunction(A1;B1)

第一个(带文字)仍然有效。第二个现在 work =它只返回#VALUE!并且甚至没有调用我的托管UDF代码(使用Visual Studio 2010进行调试)。

为什么会这样?

2 个答案:

答案 0 :(得分:0)

我不知道为什么这种行为因区域设置而异,但无论如何:

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之前进行类型转换吗?

答案 1 :(得分:0)

您需要明确设置en-US文化,以便UDF在不同的语言环境中正常工作,例如

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

加载项开头的某个地方