¿Cómo conservar los formatos de celda de Excel en C# Interop?
Estoy leyendo una hoja de Excel mediante programación usando Microsoft.Office.Interop.Excel en C#. Puedo leerlo fila por fila y convertir cada fila en una matriz de cadenas. Luego, estoy agregando estas filas a un DataTable. Todo funciona bien, excepto el de la columna en Excel que contiene valores de Fecha, y cuando lo obtengo del objeto Rango de Excel y lo transfiero a una matriz de cadenas, los valores de fecha se convierten en algún tipo de números decimales. Por ej.-
- Si la fecha value es '6/4/2016 8:14:39 PM', obtengo el valor como '42522.5224305556'
- Si el valor de la fecha es '27/5/2016 1:10:12 p. m.', obtengo el valor como '42517.54875'
Abajo está mi código-
private System.Data.DataTable GetTicketsFromExcel(string excelFilePath)
{
System.Data.DataTable dtblTickets = new System.Data.DataTable();
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Worksheet ws = new Worksheet();
Workbook wb = null;
try
{
wb = excelApp.Workbooks.Open(excelFilePath, Type.Missing, Type.Missing,
Type.Missing, Type.Missing,
Type.Missing, Type.Missing,
Type.Missing, Type.Missing,
Type.Missing, Type.Missing,
Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
ws = (Microsoft.Office.Interop.Excel.Worksheet)wb.Sheets.get_Item(1);
Range usedRange = ws.UsedRange;
Range rowRange;
string[] lsRow = null;
for (int i = 1; i <= usedRange.Columns.Count; i++)
{
dtblTickets.Columns.Add(usedRange.Cells[5, i].Value.ToString());
}
string sortColumn = "Reported On";
string sortDirection = "DESC";
dtblTickets.Columns[sortColumn].DataType = typeof(DateTime);
for (int row = 6; row <= usedRange.Rows.Count; row++)
{
//dtblTickets.Columns.Add()
rowRange = usedRange.Rows[row];
object[,] cellValues = (object[,])rowRange.Value2;
lsRow = cellValues.Cast<object>().Select(o => Convert.ToString(o)).ToArray<string>();
dtblTickets.Rows.Add(lsRow.ToArray());
}
dtblTickets.DefaultView.Sort = sortColumn + " " + sortDirection;
dtblTickets = dtblTickets.DefaultView.ToTable();
}
catch (Exception ex)
{
}
finally
{
wb.Close();
excelApp.Quit();
Marshal.ReleaseComObject(ws);
Marshal.ReleaseComObject(wb);
Marshal.ReleaseComObject(excelApp);
ws = null;
wb = null;
excelApp = null;
}
return dtblTickets;
}
Tenga en cuenta-
- No quiero usar OLEDB para leer y exportar esto
- Quiero poder leer Excel fila por fila (sin extraer cada valor de celda y convertirlos)
- No quiero convertir/formatear los datos del documento de Excel original
¿Puede alguien por favorme ayudan con esto?
------------Respuesta------------
No estoy muy seguro, si desea resolver el problema de esta manera, pero una forma es cambiar la propiedad de las celdas (o toda la fila o columna) en Excel.
- Haga clic derecho en una celda
- Formato de celdas
- En "Número", seleccione la categoría "Texto" para las celdas.
Lo probé y funcionó.
Etiquetas: excel-interop excel c#
Artículos relacionados:
javascript - Valor vacío de la etiqueta de entrada JQUERY
- web - ¿Cómo reenviar y enmascarar una URL con Google Domains/Blogger?
- java - Resources$NotFoundException tratando de configurar un RecyclerView en Android Studio
- python - Paramiko ganó, no se instala con Pip
- ios - "func prepareForSegue" no llamando a CollectionView
- excel - ¿Cómo guardar una cadena en XML en VBA?
- javascript - ¿Aplicar $ (esto) al selector principal desde un selector secundario?
- javascript: ¿hay alguna forma de actualizar o configurar campos como lo hace upsert para documentos?
- anidado: Elasticsearch no puede consultar exactamente un campo de matriz dentro del documento
- ¿Cómo verificar si un usuario ya existe en la base de datos SQLite en Android?
- Cómo escribir la salida de la consola Jenkins en el espacio de trabajo en Jenkins
- python - ValueError: demasiados valores para desempaquetar el grupo de multiprocesamiento
- La prueba de travis-ci en el archivo ruby devuelve un error de cancelación de rake
- sublimetext3 - cuando uso el comando subl, abre un archivo "usr/local/bin/subl" junto con el archivo o carpeta que quería abrir
- javascript: ¿puedo pasar una matriz que contiene un objeto de diccionario en un mapa asíncrono?
- java: desea modificar el fragmento (cómo configurar la imagen desde la URL a una vista de imagen)
Artículos calientes
- medicina china para la bronquitis
- Diferencia entre infección de las vías respiratorias superiores y bronquitis
- ¿Qué causa la epididimitis?
- Criterios diagnósticos de cálculos renales
- ¿Qué medicamento la masturbación causa prostatitis?
- ¿Cuáles son los factores de padecer gota?
- Qué comer durante la convalecencia de una hemorragia cerebral
- que es el alzheimer
- Principales criterios diagnósticos de las bronquiectasias
- ¿Cuáles son las formas de prevenir y tratar la menstruación irregular en las mujeres?
- Síntomas de gota de ternera
- Saco gestacional de 5x4mm cuanto dura el embarazo
- La diferencia entre espinillas y espinillas de ácaros
- Por qué frotar con jengibre puede tratar la caída del cabello
- ¿Cuánto tiempo se puede vivir con insuficiencia hepática?