我正在使用OLEDB读取Excel电子表格。
<add key="Data.Source.Connection.String"
value="Provider=microsoft.ACE.OLEDB.12.0;Data Source=[DATA_SOURCE];Extended Properties="Excel 12.0;HDR=YES;"" />
我有一个自定义格式“ hhmm”,它似乎是电子表格上的军事时间字符串,但在公式栏中却是日期。
一个特定的列被很好地检测为DateTime
...另一列总是被检测为我必须手动解析为的string
。尝试创建新的DateTime
对象时,遇到此错误:
String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s,DateTimeFormatInfo dtfi,DateTimeStyles styles)
at System.Convert.ToDateTime(String value)
at CallSite.Target(Closure,CallSite,Type,Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site,T0 arg0,T1 arg1)
我有此修复程序的工作版本,但是我对C#dynamic
类型在某一列检测到DateTime
而在另一列检测到string
的原因感到好奇。在Excel中,它们在格式上看起来一样。
value
变量是C#动态类型。我用来解决此问题的当前代码:
if( !DBNull.Value.Equals( value ) ) {
try {
entity.Attributes.Add( "actual_time",Convert.ToDateTime( value ).ToUniversalTime() );
} catch( Exception ) {
// In case date comes across as string.
DateTime actualTime = entity.GetattributeValue<DateTime>(
"actual_time" );
int hours = Convert.ToInt32( value.ToString().Substring( 0,2 ) );
int minutes = Convert.ToInt32( value.ToString().Substring( 2,2 ) );
TimeSpan ts = new TimeSpan( hours,minutes,0 );
actualTime = actualTime.Date + ts;
entity.Attributes.Add( "actual_time",actualTime );
} // catch
} // if
任何建议将不胜感激。