Чтение значения даты и времени из листа Excel
когда я пытаюсь прочитать значение типа datetime из листа excel, он возвращает двойное значение.например, если хотите прочитать значение '2007-02-19 14:11:45.730'
вот так, я получаю значение двойного типа .далее я конвертирую это двойное значение с помощью timespan,но не завершаю успешно, потому что я получаю только это значение '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();
пожалуйста, помогите!!! Спасибо.
7 ответов:
необходимо преобразовать формат даты из OLE Automation в формат .net с помощью DateTime.FromOADate.
double d = double.Parse(b); DateTime conv = DateTime.FromOADate(d);
возможно, вы могли бы попробовать использовать
DateTime.FromOADate
метод для преобразования между Excel и. net.
чтение значения даты и времени из листа 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");
кроме того, если ваша ячейка уже является реальной датой, просто используйте .Значение вместо .Значение2:
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
У меня была аналогичная ситуация, и я использовал приведенный ниже код для получения этой работы..
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]); } } }
надеюсь, это поможет some1 thx_joxin
вы можете попробовать простую функцию, которую я опубликовал на другом thread связано с чтением значения даты из листа excel.
Он просто берет текст из ячейки в качестве ввода и дает DateTime в качестве вывода.
Я был бы рад увидеть улучшение в моем примере кода, предоставленного в интересах сообщества разработчиков .Net.
вот ссылка на поток C# не читает дату excel из электронной таблицы