Partager via


Compatibilité descendante (traduction automatique)

Dernière modification : jeudi 6 mai 2010

S’applique à : Excel 2010 | Office 2010 | VBA | Visual Studio

Dans cet article
Définitions utiles
Obtention de la Version en cours d'exécution
Création de compléments exportant des Interfaces doubles
Nouvelles fonctions de feuille de calcul et de fonctions Analysis Toolpak

Important

Cet article a été traduit automatiquement, voir l’avertissement. Vous pouvez consulter la version en anglais de cet article ici.

Cette rubrique aborde les problèmes de compatibilité XLL dans différentes versions de Microsoft Excel.

Définitions utiles

Pensez à inclure les définitions semblables aux suivants dans votre code de projet XLL et le remplacement de toutes les instances de valeurs littérales utilisées dans ce contexte. Cela clarifier le code qui est la version spécifique et réduire les risques de bogues version sous la forme de chiffres apparemment inoffensifs.

#define MAX_XL11_ROWS            65536
#define MAX_XL11_COLS              256
#define MAX_XL12_ROWS          1048576
#define MAX_XL12_COLS            16384
#define MAX_XL11_UDF_ARGS           30
#define MAX_XL12_UDF_ARGS          255
#define MAX_XL4_STR_LEN           255u
#define MAX_XL12_STR_LEN        32767u

Obtention de la Version en cours d'exécution

Vous devez détecter quelle version en cours d'exécution à l'aide de Excel4(xlfGetWorkspace, &version, 1, &arg), où arg est un XLOPER numérique est défini sur 2 et version est une chaîne de XLOPER qui peut ensuite être convertis en un entier. Pour Microsoft Excel 2010, il s'agit de 14,0. Vous devez faire cela dans ou à partir de la fonction xlAutoOpen. Vous pouvez ensuite définir une variable globale qui informe tous les modules dans votre projet quelle version d'Excel est en cours d'exécution. Votre code peut alors décider d'appeler l'API c à l'aide de Excel12 et XLOPER12s, ou Excel4 à l'aide de XLOPERs.

Vous pouvez appeler XLCallVer pour découvrir la version de l'API C, mais cela n'indique pas parmi les versions pre-Excel 2007 vous exécutez.

Création de compléments exportant des Interfaces doubles

Pensez à une fonction XLL qui prend une chaîne et renvoie une valeur qui peut être un des types de données de feuille de calcul. Vous pouvez exporter une fonction inscrit au « PD » de la frappe et prototypée comme suit où la chaîne est passée comme une chaîne d'octets à longueur comptée.

LPXLOPER WINAPI my_xll_fn(unsigned char *arg);

Bien que cela fonctionne parfaitement bien, il existe plusieurs raisons pour lesquelles il n'est pas l'interface idéale pour votre code en commençant dans Excel 2007 :

  • Il est soumis aux limitations de chaînes d'octets API C et ne peut pas accéder les longues chaînes Unicode pris en charge commençant dans Excel 2007.

  • Bien que, à partir de Excel 2007, Excel peut transmettre et accepter XLOPERs, en interne qu'il les convertit en XLOPER12s, donc il y a une surcharge de la conversion implicite à partir Excel 2007 qui s'y ne trouve pas lorsque le code s'exécute dans les versions antérieures d'Excel.

  • Il peut être que cette fonction peut être rendue thread-safe, mais si la chaîne de type est passée à PD$, l'inscription échoue dans commençant avant Excel 2007.

Pour ces raisons, dans l'idéal, démarrage en Excel 2007 que vous devez exporter une fonction pour vos utilisateurs qui ont été enregistrée comme QD%$, en supposant que votre code est thread-safe et prototypée comme suit.

LPXLOPER12 WINAPI my_xll_fn_v12(wchar_t *arg);

Une autre raison pourquoi vous souhaiterez peut-être enregistrer une autre fonction à partir de Excel 2007 est afin de permettre aux fonctions XLL d'accepter jusqu'à 255 arguments, au lieu de la limite de 30 des versions antérieures.

Heureusement, vous pouvez bénéficier des avantages des deux en exportant les deux versions de votre projet. Vous pouvez ensuite détecter la version Excel en cours d'exécution et enregistrer sous condition la fonction la plus appropriée. Pour plus d'informations et un exemple d'implémentation, consultez développement des compléments (XLL) dans Excel 2007.

Cette approche, la possibilité qu'une feuille de calcul en cours d'exécution dans Excel 2003 peut afficher des résultats différents de la même feuille en cours d'exécution commençant dans Excel 2007. Par exemple, Excel 2003 serait mapper une chaîne Unicode dans une cellule de feuille de calcul Excel 2003 vers une chaîne d'octets ASCII et tronquez-la avant de le transmettre à une fonction XLL. À partir de Excel 2007, Excel passe une chaîne Unicode non convertie à une fonction XLL enregistrée de la manière appropriée. Cela pourrait entraîner un résultat différent. Vous devez être conscient de cette possibilité et les conséquences pour vos utilisateurs, pas seulement dans la mise à niveau. Par exemple, certaines fonctions numériques intégrées ont été améliorées entre Excel 2000 et Excel 2003.

Nouvelles fonctions de feuille de calcul et de fonctions Analysis Toolpak

Les fonctions Analysis Toolpak (ATP) font partie de Excel 2007 à partir de Microsoft Excel. Auparavant, un XLL pouvait appeler uniquement une fonction ATP à l'aide de xlUDF. À partir de Excel 2007, les fonctions ATP doivent être appelées en utilisant les énumérations de fonction définies dans xlcall.h. L'exemple de fonctions définies par l'utilisateur appelant à partir des DLL montre les deux méthodes différentes.

Notes

Avertissement traduction automatique : cet article a été traduit par un ordinateur, sans intervention humaine. Microsoft propose cette traduction automatique pour offrir aux personnes ne maîtrisant pas l’anglais l’accès au contenu relatif aux produits, services et technologies Microsoft. Comme cet article a été traduit automatiquement, il risque de contenir des erreurs de grammaire, de syntaxe ou de terminologie.

Voir aussi

Concepts

Fonctions Excel4 et Excel12 de rappel de l’API C (traduction automatique)

Programmation avec l’API C dans Excel 2010 (traduction automatique)

Nouveautés de l’API C pour Excel 2010 (traduction automatique)