2011-02-11 3 views
1

Ma question peut sembler étrange, mais c'est le scénario que je suis. J'ai besoin d'analyser une formule Excel (l'obtenir à partir de Office.Interop.Excel) et d'obtenir les paramètres de la formule (le nombre de paramètre peut varier) Il existe plusieurs cas à considérer. .: par exempleComment créer une liste de chaînes à partir des paramètres de la formule Excel dans C#

1. myformula("param1", "param2") 
2. myformula("param1", A2) 
3. myformula("param1", , "param3") 
4. myformula(A1, , "param3") 
5. myformula("param1, has commas in it", "param2") 

Y at-il une plus belle façon d'analyser ce par opposition à plusieurs branches si (en particulier en tenant compte quand tableau de chaînes est mélangée, à savoir certains paramètres ont des citations et d'autres paramètres sont des paramètres de référence)?

L'utilisation de string split(',') ne semble pas être trop utile car je peux avoir des virgules dans le paramètre lui-même.

J'ai aussi essayé

string[] paramArray = new string[]{(parameters)} 

parameters = "\"param1\", \"param2\"";

mais cela ne semble pas fonctionner non plus (il ne fonctionnera pas du tout si j'ai un paramètre vide, mais c'est un autre cas) . Mon résultat devrait être une sorte de tableau (ou liste ou toute autre collection) qui contiendrait tous les paramètres, et si un paramètre n'avait pas de guillemets, alors je devrais l'évaluer.

Toute aide serait appréciée.

+0

Split! = analyser, sauf si le texte que vous voulez "analyser" est assez limité ... – jtolle

+0

Alors, que voulez-vous faire avec des formules plus complexes comme ça? = FooBar ($ zz $ 4 & INDIRECT (fred) & UPPER ("abcd"), "parm2") –

+0

@jtolle Par Split, je voulais dire parse que je divise la chaîne et donc l'analyse de la liste des paramètres – Nir

Répondre

0

je traiter la chaîne à la recherche de " ou , si "recherche trouvé fwd la recherche de la fermeture " ignorant tout , le long du chemin et compte tenu de la possibilité de empêché " « s dans le paramètre. Lorsque vous obtenez la fermeture " reprendre la recherche de " ou , et répéter.

Une autre option serait d'utiliser divisé mais vérifier les résultats pour les éléments commençant par ". Fusionner ceux-ci avec l'élément suivant de tableau à pour le paramètre complet (peut-être> 2 élément de tableau consécutif doit être fusionné) Aussi wat Diviser pour les chaînes comme "zzz"",""xxx" (une seule chaîne qui = zzz "," xxx)

+0

Votre première suggestion est un peu ce que je pensais, mais la seconde sonne intersections. Je vais essayer. Merci! – Nir

Questions connexes