首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果区域设置发生更改,则UDF不适用于单元格引用。

如果区域设置发生更改,则UDF不适用于单元格引用。
EN

Stack Overflow用户
提问于 2015-05-01 15:03:57
回答 2查看 70关注 0票数 1

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

代码语言:javascript
运行
复制
=MyFunction("A","B")
=MyFunction(A1,B1)

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

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

代码语言:javascript
运行
复制
=MyFunction("A";"B")
=MyFunction(A1;B1)

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

为什么会这样呢?

EN

回答 2

Stack Overflow用户

发布于 2015-05-01 16:56:30

我不知道为什么这种行为会因地区的不同而有所不同,但无论如何:

UDF签名是这样的:

代码语言:javascript
运行
复制
public object MyFunction(string arg1, string arg2)
{

然后,我只需在代码中使用arg1和arg2。正如我所说的,这适用于英语区域中的单元格引用。在法国地区,如果我将其重构为如下所示,它就能工作:

代码语言:javascript
运行
复制
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之前发生吗?

票数 0
EN

Stack Overflow用户

发布于 2016-01-15 10:46:13

您需要显式地设置en-US文化,以便UDF在不同的地区正确工作。

代码语言:javascript
运行
复制
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");

在你的外接程序开始的某个地方

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29989404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档