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.