Je stocke un mélange de valeurs numériques et non numériques dans une seule colonne de tableur à l'aide de C # et EPPLUS. Lorsque j'ouvre une feuille de calcul avec Excel, il montre des triangles verts dans les cellules avec des valeurs numériques donnant un avertissement qui "nombre stocké en tant que texte" et de donner une option pour l'ignorer pour une cellule particulière. Puis-je le faire du code ou est-ce une fonctionnalité spécifique Excel? P>
4 Réponses :
Vous avez vraiment 2 options à l'aide du code: p>
En fait, seule la dernière solution a fonctionné pour moi. Les deux premiers donnent les mêmes triangles verts
de la documentation EPPLUS:
mon nombre de formats ne fonctionne pas
Si vous ajoutez des données numériques sous forme de chaînes (comme l'ExcelPackage d'origine), Excel traitera les données comme une chaîne et ne sera pas formatée. N'utilisez pas la méthode de tostring lors de la définition de valeurs numériques. P> http://eppplus.codeplex.com/wikiPage?title=faq&referringtitle=documentation p> p>
Je n'essaie pas de formater des valeurs numériques, je souhaite qu'ils soient affichés comme cela. Donc je n'ai pas la valeur "int i ', j'ai plutôt la valeur" chaîne s' et excel marquez-le avec signe d'avertissement
Vous pouvez vérifier si votre valeur est entière, convertissez-la en int et d'attribuer le numéro à la valeur de Cell. Ensuite, il sera enregistré comme numéro, pas de chaîne.
public static void SetValueIntOrStr(this ExcelRangeBase range, object value)
{
string strVal = value.ToString();
if (!String.IsNullOrEmpty(strVal))
{
double dVal;
int iVal;
if (double.TryParse(strVal, out dVal))
range.Value = dVal;
else if (Int32.TryParse(strVal, out iVal))
range.Value = iVal;
else
range.Value = strVal;
}
else
range.Value = null;
}
Avez-vous un exemple de comment appeler ça?
J'ai ajouté une réponse plus spécifique à propos de cette demande d'un exemple de comment l'appeler ici: Stackoverflow.com/questions/39417362/...
Cela semble fonctionner: Utilisation (Var Feathermonth1Cell = ProDusageWorksheet.cells [ColumnfooErrow, Month1_Col]) {SetValueDoubleOrintorstr (Feathermonth1Cell, MonthyNaRonaears [0]); }
Il s'agit d'une dérivation de la réponse du technicit qui fonctionne pour moi - j'ai ajouté la manutention de valeurs décimales et modifié le nom de la méthode pour documenter plus précisément sa vraie raison d'estre:
public static void ConvertValueToAppropriateTypeAndAssign(this ExcelRangeBase range, object value)
{
string strVal = value.ToString();
if (!String.IsNullOrEmpty(strVal))
{
decimal decVal;
double dVal;
int iVal;
if (decimal.TryParse(strVal, out decVal))
{
range.Value = decVal;
}
else if (double.TryParse(strVal, out dVal))
{
range.Value = dVal;
}
else if (Int32.TryParse(strVal, out iVal))
{
range.Value = iVal;
}
else
{
range.Value = strVal;
}
}
else
{
range.Value = null;
}
}
C'est juste ce dont j'avais besoin. J'ai ajouté un chèque d'objet nul avant la valeur.tostring () parce que j'étais parfois envoyé null.