2011-01-06 20 views

Respuesta

89

Puede aplicar formato a las celdas de números, texto, fechas, etc.

Véase mi respuesta anterior sobre este: HTML to Excel: How can tell Excel to treat columns as numbers?

(fragmento ajustado)

Si se agrega una Clase de CSS para su página:

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

Y golpee esas clases en sus TD, ¿funciona?

<td class="num">34</td> 
<td class="num">17.0</td> 
<td class="text">067</td> 
+9

tardó demasiado tiempo a google para esta solución .. estas tablas html para sobresalir puntas de hojas de cálculo son imposibles de encontrar – John

+1

brillante! esencial para los códigos postales que comienzan con 0 – squarecandy

+1

hizo mi día demasiado ... casi un año después para encontrar esto ... jaja Gracias de todos modos :) – pojomx

9

Hay un problema al usar esa solución (estilo CSS con formato de número). El Excel muestra el error "Número guardado como texto", lo que puede ser inconveniente en algunos casos. Para evitar este problema, es posible utilizar el carácter ZERO WIDTH SPACE (& # 8203;) en el comienzo del campo.

+0

¡Deja un personaje invisible, pero se ve mejor! – TheStoryCoder

+0

Esto es lo ÚNICO que me ayudó a forzar a una celda a enviar mensajes de texto. ¡Pre-anexado esto al valor y BLAMO! ¡Texto! – Gary

2

No tengo suficientes representantes para comentar o votar, pero la respuesta de Raposo funcionó muy bien para mí. Nuestro sistema importa informes de SSRS y los ejecuta en modo local. Almacena las consultas de DataSet (s) en la base de datos y las extrae en tiempo de ejecución. Sin embargo, para las exportaciones de Excel solo ejecuta los datos resultantes de la consulta en un objeto DataGrid y lo escribe directamente en la secuencia como HTML, estableciendo la extensión en .xls. Poner la solución de Raposo en consulta conjunto de datos del informe:

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

y retirarlo en la expresión del campo de SSRS:

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

es la única cosa que he encontrado que funciona. ¡Gracias!

2

Excelente solución! Lo hice como a continuación

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>"); 

y funciona bien para mí

2

he encontrado cinco soluciones para este problema:

  1. formato al campo como texto según lo descrito por scunliffe. Esto tiene el problema del triángulo verde según lo afirma Raposo.

  2. Use & # 8203; como lo describe Raposo. Esto tiene el problema de que el valor no es realmente un número. Esto podría ser un problema si los datos se extraen en algún sistema para su procesamiento.

  3. Añadir el TD como <td> = "067" </td >. Esto tiene el mismo problema que el # 2.

  4. Añadir la TD como <td> = texto (067 "000") </td >. Esto también tiene el mismo problema que el # 2.

  5. Usa una clase CSS de.text3 {mso-number-format: "000";} y agrega esta clase al TD. Esta es mi solución preferida pero tiene el problema de requerir múltiples clases si tiene números de diferentes longitudes. Si escribe su encabezado y luego itera a través de sus datos, debe agregar todas las clases posibles antes de saber cuál de ellas necesitará. Pero esto tiene la ventaja de que el texto es realmente un número y no hay un triángulo verde.

0

Puede resolver el problema también mediante la adición de espacio de no separación: &nbsp; antes de que el valor del elemento <td>.
Ejemplo: <td>&nbsp;0:12:12.185</td>
En lugar de: <td>0:12:12.185</td>

Cuestiones relacionadas