Configuration

Windows® XP SP3, VISTA, 7

.NET Framework 2.0, 3.0, 3.5

.NET Framework 4.0

 

Office 2003, 2007, 2010

Fonctions Excel

Découvrez comment créer des nouvelles fonctions intégrées à Excel et proposer de nouveaux usages à vos utilisateurs grâce au concept d’handle d’objet.


 

 Plusieurs types de fonctions

Le Framework Rio permet aux développeurs de créer des fonctions à l’aide de différents attributs. Ces fonctions sont pleinement intégrées aux autres fonctions Excel ainsi que dans le "Function Wizard".

Parmi ces attributs nous trouvons: 

AttributDescription
*cette fonctionnalité est disponible à partir d'Excel 2007.  

WorksheetFunction

Permet de transformer une méthode en une fonction Excel.

AsyncWorksheetFunction

Déclare la méthode comme étant asynchrone.

MultiThreadedFunction*

Déclare la méthode comme pouvant s'exécuter de manière concurrente et bénéficier du multithreading Excel.

RealTimeFunction

Déclare une fonction comme étant temps réel. Ce type de fonction s'utilise conjointement avec un RtdHandler chargé de gérer la source temps réel.


Exemple de mise en oeuvre:
[WorksheetFunction(Category = "Geometry", Description = "Calculates the perimeter of a rectangle")]
public double CalcRectPerimeter([Param(Description = "Length of the rectangle.")] double length,
                                [Param(Description = "Width of the rectangle.")] double width)
{
    return 2.0 * (length + width);
}


[AsyncWorksheetFunction(Category = "Geometry", Description = "Calculates asynchronously the area of a disk")]
public double CalcCircleArea([Param(Description = "Radius of the circle.")] double radius)
{
    return Math.PI * radius * radius;
}


[MultiThreadedFunction(Category = "Geometry", Description = "Multiplies a vector by a scalar")]
public double[] ScalarVector([Param(Optional = true, Default = 1.0)] double scalar,
                             [Param(Optional = true, Default = new double[] { 1.0,1.0,1.0 })] double[] vector)
{
    double[] v = new double[vector.Length];
            
    for (int i = 0; i < v.Length; i++)
    {
        v[i] = scalar * vector[i];        
    }

    return v;
}

 Object handles

Le concept d'handle d'objet permet via des fonctions Excel de référencer des objets dans des cellules. L'intérêt est multiple car il permet d'agréger en une cellule une grande quantité d'information comme une grille de prix, le résultat d'une requête ou d'un ensemble de requêtes contenant un grand nombre de données.

Au lieu d'afficher de manière classique le résultat sous la forme d'un tableau plus ou moins important contenant toutes les informations le résultat se réduit à une seule cellule. D'autres fonctions prenant en paramètre ce handle permettront d'accéder aux différentes informations contenues dans l'objet.

Pour référencer un objet dans une cellule le Framework Rio propose une solution simple. En positionnant l'attribut WorksheetFunction ou AsyncWorksheetFunction sur le constructeur d'un de vos types vous transformez le constructeur en une fonction Excel permettant de référencer l'objet. Effacer une référence dans une cellule détruit automatiquement l'objet.

D'un point de vue utilisateur ce concept permet à ce dernier de découvrir de manière contextuelle les fonctionnalités offertes par vos objets et ainsi pouvoir les manipuler.

L'exemple suivant montre comment créer une référence pour la classe WebRequest. L'utilisateur final verra la méthode CreateWebRequest dans Excel, méthode qui lui permettra d'attacher l'objet à une cellule.

 

public class WebRequest
{
   [AsyncWorksheetFunction("CreateWebRequest")]
   public WebRequest(string url)
   {
      // initialization comes here...
   }
   
   // Other object features.
}