cuando intento leer el valor del tipo de fecha y hora de la hoja de Excel, está devolviendo un valor doble. por ejemplo, si quiero leer un valor '2007-02-19 14:11:45.730'
como este, obtengo un valor de tipo doble. '2007-02-19 12:00:00 AM'
Como solo obtengo este valor, 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.
c#
excel
office-interop
Pranav
fuente
fuente
Quizás podría intentar usar el
DateTime.FromOADate
método para convertir entre Excel y .net.fuente
Lectura del valor de fecha y hora de la hoja de Excel: intente que esto funcione.
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");
fuente
Value2
devuelve undouble
valor en caja .O simplemente puede usar OleDbDataAdapter para obtener datos de Excel
fuente
Alternativamente, si su celda ya es una fecha real, simplemente 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
fuente
Value
devolverá aDateTime
si escribióDateTime
aValue
pero adouble
si escribióDateTime
aValue2
.Tuve una situación similar y utilicé el siguiente código para que esto funcione.
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 algunos1 thx_joxin
fuente
Es posible que desee probar la función simple que publiqué en otro hilo relacionado con la lectura del valor de la fecha de la hoja de Excel.
Simplemente toma texto de la celda como entrada y da DateTime como salida.
Me complacería ver una mejora en mi código de muestra proporcionado para beneficio de la comunidad de desarrollo .Net.
Aquí está el enlace para el hilo C # que no lee la fecha de Excel de la hoja de cálculo
fuente
Otra opción: cuando se desconoce el tipo de celda en el momento de la compilación y la celda está formateada, la fecha
Range.Value
devuelve unDateTime
objeto deseado .public static DateTime? GetAsDateTimeOrDefault(Range cell) { object cellValue = cell.Value; if (cellValue is DateTime result) { return result; } return null; }
fuente