2010-01-21 14 views
2

Nous avons une Syncfusion GridControl qui contient des formules comme: IF (R2 <> 0100 * (R3-R2)/R2,0)Syncfusion XlsIO - exception inattendue jeton

Ces formules fonctionnent très bien dans la grille et la formules moteur de calcul donne des résultats corrects quel que soit les paramètres régionaux/formats numériques que nous avons sur le PC concerné (par exemple anglais, français, hongrois).

Ils travaillent aussi parfaitement quand on utilise la fonction XlsIO GridtoExcel pour créer des fichiers Excel sous les paramètres régionaux anglais.

Cependant, nous obtenons des erreurs du type ci-dessous lorsque l'on tente d'utiliser GridtoExcel les paramètres régionaux comme le français et le hongrois qui utilisent un séparateur d'arguments point-virgule dans Excel:

type de jeton token.Unexpected inattendu: tNumber, valeur de chaîne:, 0 à la position 24. Formule: IF (R2 <> 0,100 * (R3-R2)/R2,0), Position: 26

Nous avons essayé d'utiliser la fonction SetSeparators, mais cela n'a aucun effet (tel que recommandé dans les KB article)

Toutes les idées sur l'approche correcte ici? Malheureusement, le documentation on SetSeparators n'est pas très utile ici.

Un grand merci

Richard

+0

J'ai eu de nombreux problèmes en essayant d'utiliser Syncfusion. Beaucoup d'erreurs "Tentatives de lecture de mémoire protégée", ce qui est étrange car je pensais que tout devait être géré. Si vous n'avez pas beaucoup de joie, je peux vous suggérer d'autres outils pour faire le travail. – Ian

+0

J'ai effectivement réussi à contourner ce en mettant temporairement la culture actuelle à tout en créant le classeur en États-Unis. Je l'ai ensuite réinitialisé après. My.Application.ChangeCulture ('en-US') En attente d'une solution plus élégante de Syncfusion, car le problème de SetSeparators est considéré comme un bug –

Répondre

1

La méthode SetSeparators() a été fixé pour WorkBook seul. Pour Grid, vous pouvez spécifier les séparateurs dans GridFormulaEngine. GridFormulaEngine considère la culture «en-US» comme une culture par défaut. Pour les autres cultures, les propriétés ParseDecimalSeparator et ParseArgumentSeparator doivent être explicitement avec la méthode SetSeparators(). Voici le code,

GridFormulaEngine.ParseDecimalSeparator = char.Parse(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator); 

GridFormulaEngine.ParseArgumentSeparator = char.Parse(CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator); 

Cordialement, Christo.