当我尝试从excel表读取datetime类型值时,它返回一个double值。例如,如果想要读取这样的值'2007-02-19 14:11:45.730'
,我得到一个double类型值。另外我转换这个double值使用时间跨度,但未成功完成,因为我只获得此值'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();
请帮忙!!! 感谢。
答案 0 :(得分:186)
您需要使用DateTime.FromOADate将日期格式从OLE自动化转换为.net格式。
double d = double.Parse(b);
DateTime conv = DateTime.FromOADate(d);
答案 1 :(得分:11)
也许您可以尝试使用DateTime.FromOADate
方法在Excel和.net之间进行转换。
答案 2 :(得分:5)
阅读日期时间值从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");
答案 3 :(得分:0)
或者您可以使用OleDbDataAdapter从Excel中获取数据
答案 4 :(得分:0)
或者,如果您的单元格已经是真实日期,只需使用.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
答案 5 :(得分: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]);
}
}
}
希望这有助于某些人 thx_joxin
答案 6 :(得分:0)
您可能想尝试我在另一个thread上发布的与从Excel工作表中读取日期值相关的简单函数。
它只是将单元格中的文本作为输入,并将DateTime作为输出。
我很高兴看到为了.Net开发社区的利益而提供的示例代码的改进。
的链接答案 7 :(得分:0)
另一种选择:当单元格类型在编译时未知并且单元格的格式设置为日期Range.Value
返回所需的DateTime
对象。
public static DateTime? GetAsDateTimeOrDefault(Range cell)
{
object cellValue = cell.Value;
if (cellValue is DateTime result)
{
return result;
}
return null;
}