Pour accéder à la démo, cliquer sur cette adresse, mais lisez la suite avant peut être, si vous aimez la technique …
D’autres principes ont été mis en place pour la création de notre composant.
B) un dictionnaire de cellules Sur une matrice type Excel, hors mode feuille de données, peu de cellules seront renseignées (par rapport aux cellules vides).

L’utilisation d’un dictionnaire permettra de minimiser les données stockées et de favoriser l’accès rapide à leurs valeurs. Dans notre cas, ce
dictionnaire est peuplé d’objets WizCellVO, qui contiennent les valeurs logiques de la cellule. Il à la forme : dic[Row|Col]=object;

C) le moteur de calcul : WizXlsEngine Les formules type “Excel” se présenterons sous la forme =(20*5*B3)-(10/SUM(B3:B5))), ou plus simple, ou bien pire.
Elles représentent la valeur ajoutée de l’outil, et c’est donc le moteur qui permettra leurs interprétation qui est l’élément le plus significatif de ce développement. Dans l’exemple donné ci-avant, la cellule B3 contient peut-être elle-même une formule, la structure de calcul est donc potentiellement gigogne. Pourtant, mettre en place un tel moteur n’est finalement pas si compliqué :
- les parenthèses forment un groupe de calcul. Ce groupe peut être complexe, et comporter des sous-groupes.
- Un groupe de calcul peut être précédé d’un nom de fonction. Dans ce cas, cette fonction s’applique au groupe.
- les groupes réduits à leur plus simple expressions contiennent une / des valeur(s), une cellule, des cellules, des plages de cellules
- les cellules sont des valeurs
- les groupes étant résolus, il ne reste que des opérateurs mathématiques primitifs, */+-
- Les opérateurs primitifs s’appliquent par priorité *, /,-,+
- l’opérateur - possède un, ou deux membres. Les autres opérateurs possèdent deux membres.
J’ai procédé en deux temps : d’abord, j’analyse l’expression, et j’en déduis un arbre de valeurs ou d’opérateurs simples. Ensuite, je calcul récursivement l’arbre, en commençant par les branches, et en tenant compte des priorités d’opérateurs. Ici, au moins une piste d’amélioration : mémoriser l’arbre d’analyse de calcul, tant que l’expression ne varie pas.

Notez l’accesseur ExcelFunctionMap, pointeur de dictionnaire public et static. L’ouverture d’un tel système permet, TRES simplement, d’insérer, comme un maître d’Excel, des fonctions personnalisées… orientées métier, par exemple. Prochaines étapes : gestion de la recopie, gestion de la mise forme/conditionnelle


Discussion
Les commentaires sont fermés pour cet article.
Comments are closed.