我正在尝试解析Excel工作表中的单元格值并使用以下代码将其转换为Datetime。但是我收到的错误是:
'arguments.CurrentWorksheet.Workbook.NumberToDateTime(inpDate)'扔了 'System.ArgumentOutOfRangeException'类型的例外 base:{“指定的参数超出有效值范围。\ r \ n参数名称:无效的日期 - 时间序列号。”} ActualValue:null 消息:“指定的参数超出了有效值的范围。\ r \ n参数名称:无效的日期 - 时间序列号。”
代码:
double inpDate = arguments.GetNumber(2);
startDate = arguments.CurrentWorksheet.Workbook.NumberToDateTime(inpDate);
表中的inpDate是20170113。
你能告诉我吗?
感谢。
答案 0 :(得分:1)
您的inpDate
不是有效的“Excel日期”。日期/时间存储在SpreadsheetGear和Excel中,作为double
表示日期/时间序列号。整数代表天数,值1是1900年1月1日,数字的小数部分代表时间(即0.5是中午)。因此,例如,值42793.0代表2017年2月27日(12:00 AM)。您可以在以下信息页面上阅读有关Excel日期的更多信息:
http://www.cpearson.com/excel/datetime.htm
IWorkbook。NumberToDateTime(...)期待这种序列日期,但您输入的'20170113'(我假设应该代表2017年1月13日)被解释为日期方式未来,就像接近57,160年(从1900年1月1日起20,170,113天)的某个地方,这在Excel / SpreadsheetGear中太过遥远。
对于您的特定情况,使用DateTime似乎更合适。ParseExact(...),例如:
DateTime dateTime = DateTime.ParseExact("20170113", "yyyyMMdd", CultureInfo.CurrentCulture);