2012-05-23 65 views
6

Actualmente estoy escribiendo una aplicación (C#) para generar informes en un archivo de Excel, en base a otros informes.¿Cómo puedo cambiar el formato de texto de una celda de Excel usando C#?

El problema es que, una vez que se obtiene un número de una hoja determinada y se copia a otro, la celda de destino no se formatea correctamente y el número no se muestra correctamente.

E.g : 
Number from source : 14.34 
Number on destination : 14.345661 

Cómo formateo la celda de destino para forzar que el formateo del número sea el mismo que el de la celda fuente.

Gracias!

+0

Varios ejemplos aquí "# ##.": Https://support.office.com/ es-us/article/Create-or-delete-a-custom-number-format-2d450d95-2630-43b8-bf06-ccee7cbe6864? ui = en-US & rs = en-US & ad = US –

Respuesta

4

El formato de una celda/rango determinado en excel se puede configurar mediante código.

public void SetCustomFormat(string format, int r, int c) 
{ 
    ((Excel.Range)xlWks.Cells[r, c]).NumberFormat = format; 
} 

En su caso específico, creo que tendría que utilizar el formato "# 0.00" o

+0

Voy a intentarlo. –

+0

No se puede ver para encontrar esta variable xlWks. ¿Es esta la hoja de trabajo? –

+0

Sí, esa es la variable de la hoja de trabajo. Lo tengo definido internamente para mi propio código usando la variable xlWks. – Nevyn

3

Aquí hay un fragmento de algún código que tengo en uso, para mostrarle el patrón general para formatear celdas. Obviamente, hay algunas variables declaradas, pero debe mostrarle lo que necesita.

sheet.get_Range("A" + CurrentRowIndex.ToString(), ColPrefix + CurrentRowIndex.ToString()).Font.Bold = true; 
sheet.get_Range("A" + CurrentRowIndex.ToString(), ColPrefix + CurrentRowIndex.ToString()).Interior.Color = Color.Silver.ToArgb(); 
sheet.get_Range("A" + CurrentRowIndex.ToString(), ColPrefix + CurrentRowIndex.ToString()).BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null); 
sheet.get_Range("A" + CompetencyStartRowIndex.ToString(), ColPrefix + CurrentRowIndex.ToString()).BorderAround(Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous, Microsoft.Office.Interop.Excel.XlBorderWeight.xlThin, Microsoft.Office.Interop.Excel.XlColorIndex.xlColorIndexAutomatic, null); 

Esa primera línea, asumiendo CurrentRowIndex = 1 y ColPrefix = "B", en sustitución de las variables con los valores resultantes se traduciría en

sheet.get_Range("A1", "B1").Font.Bold = true; 

En cualquier caso, se desea establecer la NumberFormat. (Próx ..)

sheet.Cells[Row, Column].NumberFormat = "0.00" 
+0

Gracias por la ayuda, pero esto es no es lo que estoy buscando. Estoy buscando una forma de formatear el texto dentro de la celda, no la propia celda como el fondo o el formato de fuente. Quiero que el texto se interprete de otra manera –

+0

La última línea de mi respuesta parece responder a lo que estás buscando. Tal vez debería eliminar el resto, ya que es extraño. A veces intento tontamente ser completo cuando debería ser conciso. ;-) – David

+0

Sí, la última línea resuelve mi problema. Gracias: D –

Cuestiones relacionadas