Format HTML table cellule de sorte que les formats Excel comme le texte?

je crée une table HTML qui sera ouverte comme une feuille de calcul dans Excel. Quelle balise HTML ou quel style CSS puis-je utiliser pour "dire" à Excel d'afficher le contenu de la cellule sous forme de texte?

31
demandé sur dmr 2011-01-07 00:12:22

6 réponses

vous pouvez appliquer le formatage aux cellules pour les nombres, le texte, les dates, etc.

Voir ma réponse précédente sur ce point: HTML Excel: Comment dire à Excel pour traiter les colonnes de chiffres?

(échantillon ajusté)

si vous ajoutez une classe CSS à votre page:

.num {
  mso-number-format:General;
}
.text{
  mso-number-format:"\@";/*force text*/
}

et mettre ces cours sur vos TD, ça marche?

<td class="num">34</td>
<td class="num">17.0</td>
<td class="text">067</td>
94
répondu scunliffe 2017-05-23 12:25:23

il y a un problème en utilisant cette solution (le style css avec le nombre-format). L'Excel donne l'erreur "nombre stocké comme texte" qui peut être gênant dans certains cas. Pour éviter ce problème, il est possible d'utiliser le caractère ZERO WIDTH SPACE () au début du champ.

12
répondu Raposo 2012-02-27 15:00:39

Je n'ai pas assez de rep pour commenter ou voter, mais la réponse de Raposo a très bien fonctionné pour moi. Notre système importe les rapports SSRS et les exécute en mode local. Il stocke les requêtes de L'ensemble de données dans la base de données et les tire à l'exécution. Cependant pour les exportations Excel il exécute juste les données résultantes de la requête dans un objet DataGrid et écrit cela directement au flux en tant que HTML, en définissant l'extension à .xls. Mettre Raposo de la solution dans le rapport de la requête de DataSet:

SELECT someColumn = '&#8203;' + someColumn 
FROM, etc.

et le supprimer dans L'expression du champ SSRS:

=Replace(Fields!someColumn.Value, "&#8203;", "")

est la seule chose que j'ai trouvé qui fonctionne. Merci!

2
répondu Thomas_WhoCan'tThinkOfAWittyID 2013-10-31 17:37:15

j'ai trouvé cinq solutions pour ce problème:

  1. formater le champ en texte tel que décrit par scunliffe. Cela a le problème du triangle vert comme indiqué par Raposo.

  2. utilisation telle que décrite par Raposo. C'est le problème que la valeur n'est pas vraiment un nombre. Cela pourrait être un problème si les données sont extraites dans un système de traitement.

  3. Ajouter le TD comme suit:="067" < /td>. Cela a le même problème que le #2.

  4. Ajouter le TD =texte(067,"000"). Cela a aussi le même problème que #2.

  5. utiliser une classe CSS de .texte3 {mso-nombre-format:"000";} ajouter cette classe à la TD. C'est ma solution préférée mais elle a le problème d'exiger plusieurs classes si vous avez des nombres de longueurs différentes. Si vous écrivez votre en-tête, puis itérer à travers vos données, vous devez ajouter toutes les classes possibles avant de savoir lesquelles vous aurez besoin. Mais cela présente l'avantage que le texte est en réalité un nombre et qu'il n'y a pas de triangle vert.

2
répondu Stephen 2014-05-09 13:00:50

superbe solution! Je l'ai fait comme ci-dessous

HttpContext.Current.Response.Write("<style>  .txt " + "\r\n" + " {mso-style-parent:style0;mso-number-format:\"" + @"\@" + "\"" + ";} " + "\r\n" + "</style>");
HttpContext.Current.Response.Write("<Td class='txt'>&#8203;");
HttpContext.Current.Response.Write(Coltext);
HttpContext.Current.Response.Write("</Td>");

et il fonctionne très bien pour moi

2
répondu Muhammad Yousaf 2016-01-27 15:00:03

Vous pouvez résoudre le problème en ajoutant espace insécable : &nbsp; avant la valeur de la <td> élément.

Exemple: <td>&nbsp;0:12:12.185</td>

au lieu de: <td>0:12:12.185</td>

0
répondu WhiteOne 2016-11-11 11:44:56