Modifier

Partager via


Forum Aux Questions sur les UDF Excel Services

Here are some frequently asked questions about Excel Services user-defined functions (UDFs).

Création d'UDF dans du code managé

Qu'est-ce qu'une classe UDF prise en charge ?

La classe UDF d'un assembly UDF doit être publique. Elle peut être sealed. Elle ne peut pas être abstraite, interne ou privée. Elle doit posséder un constructeur public sans paramètre. Pour les langages qui ne génèrent pas automatiquement de constructeur public sans paramètre (par exemple C#), vous pouvez n'avoir aucun constructeur.

Qu'est-ce qu'une méthode UDF prise en charge ?

La méthode UDF d'un assembly UDF doit être publique. La méthode UDF doit être thread-safe.

A UDF method cannot have:

  • ref or out parameters

  • retval attributes

  • Optional arguments

  • unsupported data types

The UDF method must also have a supported return type. Pour obtenir la liste des types de données pris en charge, voir la section « Types de données » de cette rubrique.

Puis-je appeler un service Web à partir d'un assembly UDF ?

Oui. Pour obtenir un exemple, voir le code UDF suivant. Consultez également Guide pratique pour créer une fonction définie par l’utilisateur qui appelle un service web.

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

Types de données

Quels sont les types de données pouvant servir de paramètres UDF ?

Les types de données pris en charge sont les suivants :

  • Types numériques : Double, Single, Int32, UInt32, Int16, UInt16, Byte, Sbyte

  • String

  • Boolean

  • Tableaux d'objets : tableaux à une ou deux dimensions, c'est-à-dire objet [] et objet [,]

  • Date/heure

Quels sont les types valeur de retour pris en charge ?

Les types valeur de retour pris en charge sont les suivants :

  • Types numériques : Double, Single, Int32, UInt32, Int16, UInt16, Byte, Sbyte

  • String

  • Boolean

  • Tableaux d'objets : tableaux à une ou deux dimensions, c'est-à-dire objet [], objet [,], int[] et int[,])

  • Date/heure

  • Objet

XLLs

Les XLL sont-ils pris en charge ?

Not directly. Excel Services will load and call only managed-code UDFs. However, you can write a managed-code wrapper to call the XLLs and deploy the XLLs to the server, together with the managed-code wrapper assembly.