когда я пытаюсь прочитать значение типа datetime из листа Excel, оно возвращает двойное значение. например, если я хочу прочитать '2007-02-19 14:11:45.730'
такое значение , я получаю значение двойного типа. Кроме того, я конвертирую это двойное значение, используя временной интервал, но не завершаю успешно поскольку '2007-02-19 12:00:00 AM'
теперь я получаю только это значение, мне нужно точно такое же значение даты и времени, что и первое. Мой код похож: -
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();
Пожалуйста помоги!!! Спасибо.
c#
excel
office-interop
Пранав
источник
источник
Возможно, вы могли бы попробовать использовать этот
DateTime.FromOADate
метод для преобразования между Excel и .net.источник
Чтение значения Datetime из листа Excel: попробуйте, это будет работать.
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");
источник
Value2
возвращает упакованноеdouble
значение.Или вы можете просто использовать OleDbDataAdapter для получения данных из Excel
источник
В качестве альтернативы, если в вашей ячейке уже есть настоящая дата, просто используйте .Value вместо .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
источник
Value
будет возвращатьDateTime
если вы написалиDateTime
вValue
ноdouble
если вы написалиDateTime
вValue2
.У меня была аналогичная ситуация, и я использовал приведенный ниже код, чтобы это сработало.
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]); } } }
Надеюсь, это поможет кому-то thx_joxin
источник
Возможно, вы захотите попробовать простую функцию, которую я опубликовал в другой ветке, связанной с чтением значения даты из листа Excel.
Он просто берет текст из ячейки в качестве ввода и выдает DateTime в качестве вывода.
Я был бы рад увидеть улучшения в моем примере кода, предоставленном сообществу разработчиков .Net.
Вот ссылка на поток C #, который не читает дату Excel из электронной таблицы
источник
Другой вариант: когда тип ячейки неизвестен во время компиляции, а ячейка отформатирована как Date,
Range.Value
возвращает желаемыйDateTime
объект.public static DateTime? GetAsDateTimeOrDefault(Range cell) { object cellValue = cell.Value; if (cellValue is DateTime result) { return result; } return null; }
источник