Comment obtenir la valeur de la cellule avec la mise en forme appliquée (valeur de la cellule formatée) avec OpenXML SDK
J'ai cherché sur google et la recherche sur le site pour la réponse, mais je ne pouvais pas trouver une solution de partout, la plupart des gens discuter de la façon d'ajouter un nouveau format de nombre pour le document et de l'appliquer.
Ce que j'ai besoin est d'obtenir la valeur de la cellule comme une chaîne de caractères avec la mise en forme appliquée - c'est à dire même chaîne que serait affiché par Excel.
J'ai déjà compris qu'il n'y a pas de moyen facile ou fonction intégrée qui permettrait le retour de la readymade valeur mise en forme d'une cellule.
Il me semble donc que, pour obtenir la valeur que j'ai besoin de faire deux choses:
1. Obtenir la chaîne de format.
2. Le Format de la valeur de la cellule à l'aide de cette chaîne.
Mais j'ai des problèmes avec les deux étapes.
On peut facilement obtenir CellFormat instance qui contiendrait NumberFormatId:
CellFormat cellFormat = (CellFormat) document.WorkbookPart.WorkbookStylesPart.Stylesheet.CellFormats.ElementAt(cell.StyleIndex);
Mais comment obtenir la chaîne de format avec cette NumberFormatId, si l'id correspond à l'un des standards des formats prédéfinis? (c'est à dire en dessous de 160), Ils ne sont pas dans le document de feuille de calcul et je ne peux pas croire qu'ils devraient être codé en dur dans l'application.
Aussi, une fois que la chaîne de format est en quelque sorte obtenu, comment l'appliquer à la valeur de la cellule? Jusqu'à présent, je comprends, le code doit vérifier le type de la valeur de la cellule et si est de Nombre à convertir en chaîne à l'aide de la chaîne de format.
J'ai trouvé cette page qui mentionne l'utilisation de Microsoft.Bureau de.Excel.Interop, mais je préfère rester avec OpenXML SDK seulement.
Dans l'ensemble, je suis très surpris qu'il est donc difficile de trouver une réponse définitive à cette question sur le Web que j'ai pensé que ce serait quelque chose qui beaucoup de développeurs ont besoin dans leur travail quotidien.
source d'informationauteur El G
Vous devez vous connecter pour publier un commentaire.
Les hommes, c'est un dur... je vais être en ajoutant ici les choses que j'ai trouvé qui pourrait être intéressant..
Premier est d'obtenir le format de numérotation de la cellule (une fois que vous avez la CellFormat:
Pour plus d'informations, vous pouvez aller à: NumberingFormats
Im essayant de trouver comment appliquer ce format à la
cell.CellValue
bien... je pense que c'est la façon dont vous devez aller!Ok, la lecture de la ClosedXml code (open source), semble être facile à obtenir le format.
Simplement de convertir la valeur de texte à son type (int, double, etc) et d'appeler la méthode ToString passant le format. J'ai essayé de le faire avec la Chaîne.Format et n'a pas fonctionné. J'ai testé le ToString et il fonctionne, mais quelque chose manque toujours.
Je vous recommande de regarder cette classe et obtenir le code de la méthode GetFormattedString () @El G dire dans son commentaire.
Bassicaly vous devez ajouter quelque chose comme ceci:
Espère que cela vous aide...
Si vous voulez prendre la valeur de la cellule avec la mise en forme appliquée, de même que celui affiché dans Excel, à l'utilisation .Propriété Text de l'objet de Cellule. Comme ceci: