Excel Services UDF についてのよく寄せられる質問

ここでは、Excel Services のユーザー定義関数 (UDF) に関してよく寄せられる質問をいくつか取り上げます。

マネージ コード UDF の作成

サポートされる UDF のクラスはどのようなものですか?

UDF アセンブリ内の UDF クラスは public でなければなりません。 sealed にすることができます。 abstract、internal、private にすることはできません。 パラメーターのない public コンストラクターを持っている必要があります。 パラメーターのない public コンストラクターを自動的に生成する言語 (たとえば、C#) では、コンストラクターをまったくコーディングしなくても構いません。

サポートされる UDF メソッドはどのようなものですか?

UDF アセンブリ内の UDF メソッドは、public でなければなりません。 UDF メソッドは、スレッド セーフでなければなりません。

UDF メソッドは、以下のものを持つことはできません。

  • ref または out パラメーター

  • retval 属性

  • Optional 引数

  • サポートされないデータ型

さらに、UDF メソッドは、サポートされる戻り値の型を持つ必要があります。 サポートされるデータ型のリストについては、このトピックの「データ型」セクションを参照してください。

UDF アセンブリから Web サービスを呼び出すことはできますか?

はい。 たとえば、次の UDF サンプルコードを参照してください。 「 方法: Web サービスを呼び出す UDF を作成する」も参照してください。

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Excel.Server.Udf;
using UdfWS.dk.iter.webservices;

namespace UdfWS
{
    [UdfClass]
    public class MyUdfClass
    {
        // Instantiate the Web service. The Web service used is at   
        // http://webservices.iter.dk/calculator.asmx
        Calculator calc = new Calculator();

        [UdfMethod]
        public int MyFunction()
        {
            int i;
            i = (i + 88) * 2;
            return i;
        }

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

        [UdfMethod]
        public int AddMe(int a, int b)
        {
            int c;
            // Call the Web service Add method
            c = calc.Add(a, b);
            return c;
        }        
    }
}

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports Microsoft.Office.Excel.Server.Udf
Imports UdfWS.dk.iter.webservices

Namespace UdfWS
    <UdfClass> _
    Public Class MyUdfClass
        ' Instantiate the Web service. The Web service used is at   
        ' http://webservices.iter.dk/calculator.asmx
        Private calc As New Calculator()

        <UdfMethod> _
        Public Function MyFunction() As Integer
            Dim i As Integer
            i = (i + 88) * 2
            Return i
        End Function

        <UdfMethod(IsVolatile := True)> _
        Public Function MyDouble(ByVal d As Double) As Double
            Return d * 9
        End Function

        <UdfMethod> _
        Public Function AddMe(ByVal a As Integer, ByVal b As Integer) As Integer
            Dim c As Integer
            ' Call the Web service Add method
            c = calc.Add(a, b)
            Return c
        End Function
    End Class
End Namespace

データ型

UDF パラメーターとして使用できるデータ型はどのようなものですか?

サポートされるデータ型は、以下のとおりです。

  • 数値型: Double、Single、Int32、UInt32、Int16、UInt16、Byte、Sbyte

  • String

  • Boolean

  • オブジェクト配列: 1 次元または 2 次元配列、すなわち、object [] および object [,]

  • DateTime

サポートされている戻り値の型はどのようなものですか?

サポートされる戻り値の型は、以下のとおりです。

  • 数値型: Double、Single、Int32、UInt32、Int16、UInt16、Byte、Sbyte

  • String

  • Boolean

  • オブジェクト配列: 1 次元または 2 次元配列、すなわち、object []、object [,]、int[]、および int[,]

  • DateTime

  • オブジェクト

XLL

XLL はサポートされていますか?

直接的にはサポートされていません。 Excel Services は、マネージ コード UDF のみを読み込み、呼び出します。 しかし、XLL を呼び出すマネージ コード ラッパーをコーディングし、XLL をマネージ コード ラッパー アセンブリと一緒にサーバーに展開することができます。