c# - sintaxis - Lectura del valor de fecha y hora desde la hoja de Excel
macro para insertar fecha excel (7)
cuando intento leer el valor de tipo de fecha y hora de la hoja de Excel, devuelve un valor doble. Por ejemplo, si desea leer el valor ''2007-02-19 14:11:45.730''
así, obtengo un valor de tipo doble. Estoy convirtiendo este doble valor usando el intervalo de tiempo, pero no se completó con éxito porque recibo este valor ''2007-02-19 12:00:00 AM''
ahora quiero exactamente el mismo valor de fecha y hora que el primero. Mi código es como:
TimeSpan datefromexcel = new TimeSpan(Convert.ToInt32((range.Cells[rCnt, cCnt] as Excel.Range).Value2), 0, 0, 0);
DateTime inputdate = new DateTime(1900, 1, 1).Add(datefromexcel);
arrrow2[cCnt - 1] = inputdate.ToString();
¡¡¡Por favor ayuda!!! Gracias.
Alternativamente, si su celda ya es una fecha real, solo use .Value en lugar de .Value2:
excelApp.Range[namedRange].Value
{21/02/2013 00:00:00}
Date: {21/02/2013 00:00:00}
Day: 21
DayOfWeek: Thursday
DayOfYear: 52
Hour: 0
Kind: Unspecified
Millisecond: 0
Minute: 0
Month: 2
Second: 0
Ticks: 634970016000000000
TimeOfDay: {00:00:00}
Year: 2013
excelApp.Range[namedRange].Value2
41326.0
Debe convertir el formato de fecha de Automatización OLE al formato .NET utilizando DateTime.FromOADate.
double d = double.Parse(b);
DateTime conv = DateTime.FromOADate(d);
Es posible que desee probar la función simple que publiqué en otro thread relacionado con el valor de la fecha de lectura de la hoja de Excel.
Simplemente toma el texto de la celda como entrada y da DateTime como salida.
Me gustaría ver mejoras en mi código de muestra proporcionado para beneficio de la comunidad de desarrollo de .Net.
Aquí está el enlace para el hilo thread
O simplemente puede usar OleDbDataAdapter para obtener datos de Excel
Quizás podría intentar usar el método DateTime.FromOADate
para convertir Excel y .net.
Tuve una situación similar y utilicé el siguiente código para que esto funcionara.
Aspose.Cells.LoadOptions loadOptions = new Aspose.Cells.LoadOptions(Aspose.Cells.LoadFormat.CSV);
Workbook workbook = new Workbook(fstream, loadOptions);
Worksheet worksheet = workbook.Worksheets[0];
dt = worksheet.Cells.ExportDataTable(0, 0, worksheet.Cells.MaxDisplayRange.RowCount, worksheet.Cells.MaxDisplayRange.ColumnCount, true);
DataTable dtCloned = dt.Clone();
ArrayList myAL = new ArrayList();
foreach (DataColumn column in dtCloned.Columns)
{
if (column.DataType == Type.GetType("System.DateTime"))
{
column.DataType = typeof(String);
myAL.Add(column.ColumnName);
}
}
foreach (DataRow row in dt.Rows)
{
dtCloned.ImportRow(row);
}
foreach (string colName in myAL)
{
dtCloned.Columns[colName].Convert(val => DateTime.Parse(Convert.ToString(val)).ToString("MMMM dd, yyyy"));
}
/*******************************/
public static class MyExtension
{
public static void Convert<T>(this DataColumn column, Func<object, T> conversion)
{
foreach (DataRow row in column.Table.Rows)
{
row[column] = conversion(row[column]);
}
}
}
Espero que esto ayude a algunos thx_joxin
Lectura del valor de fecha y hora de la hoja de Excel: pruebe que esto funcionará.
string sDate = (xlRange.Cells[4, 3] as Excel.Range).Value2.ToString();
double date = double.Parse(sDate);
var dateTime = DateTime.FromOADate(date).ToString("MMMM dd, yyyy");