了解 Excel Services UDF
用户定义函数 (UDF) 是扩展 Excel 的计算和数据导入功能的自定义函数。开发人员通过创建自定义计算包来提供:
Excel 中未内置的函数。
内置函数的自定义实现。
针对旧的或不受支持的数据源和特定于应用程序的数据流的自定义数据源。
创建工作簿的用户可以像调用内置函数一样,从单元格中通过公式调用 UDF(例如,“= MyUdf(A1*3.42)”)。
Excel Services UDF 使您能够在单元格中使用公式来调用以托管代码编写并部署到 Microsoft Office SharePoint Server 2007 的自定义函数。可以通过创建 UDF 来:
调用自定义数学函数。
将自定义数据源的数据导入工作表中。
通过 UDF 调用 Web 服务。
创建托管代码 UDF
创建 Excel Services 托管代码 UDF 的一种简便方法是使用 Microsoft Visual Studio 2005 类库模板。在托管代码 UDF 项目中,需要引用名为 Microsoft.Office.Excel.Server.Udf.dll 的 Excel Services UDF 动态链接库 (DLL)。
Microsoft.Office.Excel.Server.Udf.dll 已使用 Microsoft .NET Framework 2.0 编译。如果您使用 Visual Studio 2003 来创建托管代码 UDF,则将无法引用 Microsoft.Office.Excel.Server.Udf.dll。使用旧版本的 .NET Framework 创建的程序集无法引用使用 .NET Framework 2.0 创建的程序集。
必需的属性
若要将某个类中的自定义函数用作 Excel Services UDF 类,必须使用 Microsoft.Office.Excel.Server.Udf.UdfClass 属性标记 UDF 类。在 UDF 程序集中,未使用此属性标记的任何类将被 Excel Calculation Services 忽略。它们不被视为 Excel Services UDF 类。
若要将某个类中的自定义函数用作 Excel Services UDF 方法,必须使用 Microsoft.Office.Excel.Server.Udf.UdfMethod 属性标记 UDF 方法。在 UDF 程序集中,未使用此属性标记的任何方法将被忽略,因为它们不被视为 Excel Services UDF 方法。
Microsoft.Office.Excel.Server.Udf.UdfMethod 属性 (attribute) 具有一个 IsVolatile 属性 (property)。您可以使用 IsVolatile 属性 (property) 来指定某 UDF 方法是可变的还是稳定的。IsVolatile 属性 (property) 采用一个布尔值。默认值为“False”,意味着该特定的 UDF 方法是稳定的。
Microsoft.Office.Excel.Server.Udf.dll 的位置
在已经安装了 Office SharePoint Server 2007 的计算机上,可以在以下路径找到 Microsoft.Office.Excel.Server.Udf.dll 的一个副本:
[drive:]\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI
部署和安全性
部署位置类型
UDF 程序集可以驻留在本地目录、全局程序集缓存或网络共享中。在服务器场的情况下,本地目录路径在服务器场中必须是相同的。
UDF 程序集的标识
可以通过使用 UDF 程序集的完整路径或强名称来公开该程序集的标识,以供 Excel Calculation Services 调用。
例如,可以使用:
C:\UDFs\MySampleUdf.dll
\\MyNetworkServer\UDFs\MySampleUdf.dll
CompanyName.Hierarchichal.MyUdfNamespace.MyUdfClassName.dll, Version=1.1.0.0, Culture=en, PublicKeyToken=e8123117d7ba9ae38
启用 UDF 程序集
默认情况下禁用 UDF 程序集。
共享服务提供程序 (SSP) 中的每个 Excel Services 受信任位置都有一个 AllowUdfs 标志。
备注
AllowUdfs 标志是由“Excel Services 受信任文件位置”页上的“允许的用户定义函数”选项表示的。
默认的 AllowUdfs 值是 false。如果 AllowUdfs 值在特定的受信任位置中设置为 false,则不允许该受信任位置中的工作簿调用 UDF。
为了允许从特定的受信任位置中调用 UDF,请将 AllowUdfs 值设置为 true。
对于在此受信任位置中有 UDF 调用的工作簿,如果 AllowUdfs 值为 false,同时在此工作簿上开始一个会话,则 UDF 调用将会失败。如果在会话开始后将 AllowUdfs 值改为 true,则 UDF 调用也将失败。这是因为,在 AllowUdfs 标志中所做的更改要等到下一个会话才生效(在更新配置数据库之后生效)。
允许 UDF 程序集运行
如果管理员想允许 UDF 程序集运行,他们必须注册所有 UDF 程序集,并通过在受信任位置中将 AllowUdfs 标志设置为 true 来允许工作簿调用 UDF。
重新加载 UDF 程序集
若要重新加载 UDF 程序集,可以运行 iisreset 或重启 Excel Calculation Services 应用程序域。
有关详细信息,请参阅从内存中卸载应用程序(该链接可能指向英文页面)(https://msdn.microsoft.com/library/default.asp?url=/library/zh-cn/csvr2002/htm/cs_mmc_administering_myhj.asp,)。
UDF 程序集的默认代码访问安全权限
默认情况下,UDF 程序集以完全信任状态运行。
限制 UDF 程序集的代码访问安全权限
如果不希望特定的 UDF 程序集以完全信任状态运行,则必须显式限制该 UDF 程序集的代码访问安全权限。可以通过使用 .NET Framework 2.0 配置工具来配置代码组并限制权限。
开发人员还可以在代码中使用 RequestMinimum 和 RequestOptional 方法,以确保他们的 UDF 程序集仅获得所需的权限。
有关配置代码组以及 RequestMinimum 和 RequestOptional 方法的详细信息,请参阅 MSDN 上的以下文章:
使用 .NET Framework 配置工具来配置代码组(https://msdn.microsoft.com/library/default.asp?url=/library/zh-cn/cpguide/html/cpconUsingNETConfigurationToolToWorkWithCodeGroups.asp?frame=true,)。
实践中的代码安全权限(https://msdn.microsoft.com/library/default.asp?url=/library/zh-cn/dnnetsec/html/thcmch08.asp,)。