Поделиться через


Шаг 2. Создание пользовательских функций управляемого кода

After you have added a reference to Microsoft.Office.Excel.Server.Udf.dll to your project, the next step is to create some custom functions and mark them with the Службы Excel user-defined function (UDF) attributes.

You must mark your UDF class with the Microsoft.Office.Excel.Server.Udf.UdfClass attribute, and mark the UDF methods with the Microsoft.Office.Excel.Server.Udf.UdfMethod attribute.

Any methods that are not marked with the Microsoft.Office.Excel.Server.Udf.UdfMethod attribute in the UDF assembly will be ignored, because they will not be considered UDF methods.

The Microsoft.Office.Excel.Server.Udf.UdfMethod attribute has an IsVolatile property. You use the IsVolatile property to specify a UDF method as volatile or nonvolatile. The IsVolatile property takes a Boolean value. The default value is false, which means that particular UDF method is nonvolatile.

Создание пользовательских функций

Добавление директив

  • Используемые типы определяются в пространстве имен Microsoft.Office.Excel.Server.Udf . Adding a using (or Imports) directive at the top of the Class1.cs file will allow you to use the types in Microsoft.Office.Excel.Server.Udf without having to fully qualify the types in the namespace.

    Чтобы добавить эту директиву, добавьте следующий код в начало кода в файле Class1.cs после using System.Text:

    using Microsoft.Office.Excel.Server.Udf;
    
    Imports Microsoft.Office.Excel.Server.Udf
    

Определение пользовательских классов и методов

  1. Пометьте Class1 как класс UDF, добавив следующий атрибут чуть выше public class Class1:

    [UdfClass]
    
    <UdfClass>_
    
  2. Create a function that takes a number (of type double), and in the function, multiply the number by 9. The function is a UDF method that is nonvolatile. Добавьте следующий код в файл Class1:

    [UdfMethod]
    public double MyDouble(double d)
    {
        return d * 9;
    }
    
    <UdfMethod> _
    Public Function MyDouble(ByVal d As Double) As Double
        Return d * 9
    End Function
    

    Примечание.

    [!Примечание] The default value for the IsVolatile property is false, which means that particular UDF method is nonvolatile. Следовательно, достаточно пометить метод UDF [UdfMethod], не относящийся к типу . Не обязательно помечать его как [UdfMethod(IsVolatile = false)].

  3. Create another function that returns the current date using the System.DateTime.Today property. The function is a UDF method that is volatile. Добавьте следующий код в файл Class1:

    [UdfMethod(IsVolatile = true)]
    public DateTime ReturnDateTimeToday()
    {
        return (DateTime.Today);
    }
    
    <UdfMethod(IsVolatile := True)> _
    Public Function ReturnDateTimeToday() As Date
        Return (Date.Today)
    End Function
    

Построение проекта

  1. В меню Построение выберите пункт Построить решение.
  2. You should find SampleUdf.dll assembly in the directory where you have saved your project.

Полный код

Приведенный ниже пример кода представляет собой полный фрагмент кода в файле примера Class1.cs, который описывается выше.

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Excel.Server.Udf;

namespace SampleUdf
{
    [UdfClass]
    public class Class1
    {
        [UdfMethod]
        public double MyDouble(double d)
        {
            return d * 9;
        }

        [UdfMethod(IsVolatile = true)]
        public DateTime ReturnDateTimeToday()
        {
            return (DateTime.Today);
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports Microsoft.Office.Excel.Server.Udf

Namespace SampleUdf
    <UdfClass> _
    Public Class Class1
        <UdfMethod> _
        Public Function MyDouble(ByVal d As Double) As Double
            Return d * 9
        End Function

        <UdfMethod(IsVolatile := True)> _
        Public Function ReturnDateTimeToday() As Date
            Return (Date.Today)
        End Function
    End Class
End Namespace

См. также

Задачи

Концепции