officeba > 单独文章


MSDN Visual系列:在MOSS中为Excel Services编写托管代码形式的用户定义函数

MS Office Excel 2007与上一版的Excel一样,都提供了对用户定义函数(UDF)的支持。UDF用于扩展Excel的计算和数据导入能力。我们可以利用UDF来:
  • 提供默认的Excel函数库中没有提供的功能
  • 可以为一些老的不支持的数据源创建自定义的数据种子,或创建满足特定应用程序需求的数据流

在2007 MS Office体系中,我们可以使用 Excel Services来创建基于 .NET框架的UDF,并可以将这些UDF部署到MOSS中。这些UDF可以被部署在Excel Services上的Excel工作簿所调用。创建这些UDF可以来:

  • 调用一些自定义的数学函数
  • 从一些不受支持的数据源获取数据(比如从老的数据库,MS Access,MS SQL Server获取数据到工作簿中)
  • 调用Web服务

下面是为Excel Services编写托管代码形式的UDF的五大步骤,接下来将会分别对各步进行详细介绍。

  1. 在Visual Studio 2005中创建一个托管代码的UDF项目。
  2. 添加到Excel Services UDF组件的引用。
  3. 创建一个自定义函数。
  4. 配置Excel Services来允许UDF的使用。
  5. 创建并发布一个Excel工作簿来调用UDF。

在Visual Studio 2005中创建一个托管代码的UDF项目

我们可以通过套用Visual Studio 2005的类库模板来开始编写一个Excel Services的托管代码型UDF组件。

添加到Excel Services UDF组件的引用

如果Visual Studio 2005运行在MOSS服务器上,可以直接在Visual Studio中添加引用。在添加引用对话框的.NET标签中选择下面的Excel Services UDF Framework component,点确定即可。如果Visual Studio 2005没有运行在MOSS服务器上,我们需要手工从MOSS服务器上拷贝一个Excel Services UDF组件到本地项目文件夹中。该组件文件名是Microsoft.Office.Excel.Server.UDF.dll 默认放在MOSS服务器下面的目录中:

C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI

拷贝过来后我们就可以在项目中添加该组件的引用了。在添加引用对话框中点浏览,找到那个dll,点确定即可。

注意:Microsoft.Office.Excel.Server.UDF.dll只能用于Microsoft .NET Framework 2.0。所以,我们不能使用Visual Studio 2003来创建托管代码的UDF。因为在老版本的.NET框架下创建的组件无法添加引用到基于.NET Framework 2.0创建的组件。

创建自定义函数

接下来我们就可以创建自定义函数并用Excel Services UDF特性标识该函数。我们必须使用Microsoft.Office.Excel.Server.UDF.UDFClass特性来标识实现UDF方法的类,并使用Microsoft.Office.Excel.Server.UDF.UDFMethod特性来标识该UDF方法。我们先引用下面的命名空间,以便在接下来的代码中不用敲一长串的命名空间路径:

using Microsoft.Office.Excel.Server.Udf;

接下来,用UdfClass特性标记一下该类,用来说明其中包含了UDF的实现。

[UdfClass]
public class Class1

在该类中添加如下形式的方法来实现UDF。

[UdfMethod]
public double MyDouble(double d)
{
    
return (d * 9);
}

[UdfMethod(IsVolatile 
= true)]
public DateTime ReturnDateTimeToday()
{
    
return (DateTime.Today);
}

MyDouble方法接收一个double类型的参数,返回乘以9后的值。ReturnDateTimeToday方法返回当前日期。两个方法都用UdfMethod特性进行了标记。组件中任何其他未作标记的方法都将被忽略,因为它们都将不会被作为UDF方法对待。UdfMethod特性有一个布尔型的属性IsVolatile,我们可以通过该属性指定一个UDF方法是可变(volatile)还是不可变(nonvolatile)。默认值是FALSE,即不可变。

配置Excel Services来允许UDF的使用

共2个步骤:

  1. 创建一个受信任的文件位置

  2. 注册UDF 组件

一个受信任的文件位置可以是一个WSS位置,共享文件夹,或运行Excel Services的服务器上的一个Web文件夹。这些都是可以用来提供对工作簿访问的。下面的步骤将在MOSS中配置一个到WSS位置的信任:

  1. 点开始菜单, 所有程序.

  2. 点 Microsoft Office Server 选择 SharePoint 3.0 管理中心.

  3. 在左侧快速启动栏中, 点SSP(shared services provider) 的链接,——比如, "SharedServices1"—进入共享服务主页。

  4. 点Excel Services 设置一节中的受信任文件位置

  5. 点添加受信任文件位置

  6. 在地址一栏中输入存放Excel工作薄的位置—比如, https://MyServer/Shared%20Documents.

  7. 在位置类型中点选合适的存储类型,本例中是Windows SharePoint Services.

  8. 在下面的信任子级中选上受信任的子级,以使得我们可以信任子库或子目录。

  9. 最下面的允许用户自定义函数中,选中允许,以使得我们可以在此位置中的Excel工作簿里调用UDF。

  10. 确定。

Excel Services维护了一个已注册的UDF组件列表。我们可以启用和禁用每个组件,以便Excel Services加载并调用它们。要注册一个UDF组件,可以在MOSS服务器上如下操作:

  1. 还是在刚刚的SSP主页中,Excel Services设置一节中,点用户定义的函数集

  2. 在用户定义函数页面中,点添加用户定义函数程序集

  3. 在程序集框中, 输入刚才我们在上面创建的UDF组件的路径

  4. 在程序集位置中,选择合适的位置

  5. 在启用程序集中,选中启用(默认就是选中的)

  6. 确定

如果选择的程序集位置是文件路径,并指向一个本地文件夹而不是共享文件夹,那么我们就需要在服务器场的每个前端服务器上都保证可以访问到该本地文件夹。我们可以通过创建一个解决方案包的方式来部署一个UDF 组件。可以参考我前面的文章来创建一个解决方案包

创建并发布一个Excel工作簿来调用UDF

创建一个Excel工作簿来调用UDF

  1. 打开Excel 2007.

  2. 在A1单元格中, 输入公式来调用MyDouble UDF。 MyDouble 函数需要一个double型的参数。本例选取B1单元格来做参数。在A1里输入=MyDouble(B1)

  3. 在 B1里输人数字8

  4. 使 B1单元格成为一个命名范围。首先点公式标签,点B1选中它。在定义名称组中,点定义。在新的名称对话框中名称一栏中输人 MyDoubleParam

  5. 在A2里输人公式调用ReturnDateTimeToday UDF。输人=ReturnDateTimeToday()

  6. 在A3里输人公式调用ReturnDateTimeToday UDF。输人=ReturnDateTimeToday() 。然后,右击单元格A3,在快捷菜单中选择格式化单元格。

  7. 在数字标签下选择日期。在类型列表中选择日期格式,如,*2001-3-14.

  8. 确定

  9. 保存工作簿到本地文件夹中,文件名为"TestSampleUdf.xlsx"

在Excel中,单元格 A1, A2, 和A3 将会被求值为"#NAME?" 。这是因为Excel不能解析到MyDouble UDF 与 ReturnDateTimeToday UDF的调用。当我们用Excel Services显示时,这些公式就可以正常显示了。

最后,发布该工作簿到Excel Services:

  1. 点he Microsoft Office 按钮,选发布,然后选Excel Services

  2. 在 另存为对话框中,点 Excel Services选项

  3. 在Excel Services 选项对话框中,在显示标签中,确认整个工作薄被选中。

  4. 点参数标签

  5. 点添加...按钮

  6. 在添加参数对话框中,选择MyDoubleParam

  7. 点确定, "MyDoubleParam" 就显示在参数列表中了

  8. 确定

  9. 在 另存为对话框中,确保勾选上了在Excel Services中打开 。

  10. 在文件名一栏输入一个受信任的SharePoint文档库的路径,比如,https://MyServer/Shared%20Documents/TestSampleUdf.xlsx.

  11. 保存

当TestSampleUdf.xlsx 工作簿加载到Excel Web Access.中后,这里单元格A1 会显示数字"72" ,因为 B1 * 9 = 8 * 9,等于72。A2 显示一个数字。而A3 显示当前日期。A2单元格中的数字实际上是从1900-1-1到现在的天数 (也可能是从1904-1-1,如果 Excel 被配置为使用1904日期系统)。如果我们在参数面板中改变了传递给myDouble UDF的参数,并点应用, Excel Services就会重新计算A1的值。

通过以上对2007 Office体系中Excel Services的介绍,相信大家已经具备将Excel 2007集成到商业应用中的能力了。 


声明:欢迎各大网站转载本站文章,还请保留一条能直接指向本站的超级链接,谢谢!

时间:2007-09-27 13:22:12,点击:65824


【OfficeBa论坛】:阅读本文时遇到了什么问题,可以到论坛进行交流!Excel专家邮件:342327115@qq.com(大家在Excel使用中遇到什么问题,可以咨询此邮箱)。

【声明】:以上文章或资料除注明为Office自创或编辑整理外,均为各方收集或网友推荐所得。其中摘录的内容以共享、研究为目的,不存在任何商业考虑。如有任何异议,请与本站联系,本站确认后将立即撤下。谢谢您的支持与理解!


相关评论

我要评论

评论内容