OLEDB从Excel文件读取数据时,如何将自定义格式的字符串自动转换为DateTime?

我正在使用OLEDB读取Excel电子表格。

<add key="Data.Source.Connection.String"
      value="Provider=microsoft.ACE.OLEDB.12.0;Data Source=[DATA_SOURCE];Extended Properties=&quot;Excel 12.0;HDR=YES;&quot;" />

我有一个自定义格式“ 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

任何建议将不胜感激。

ding1988ding 回答:OLEDB从Excel文件读取数据时,如何将自定义格式的字符串自动转换为DateTime?

从此处查找Excel-SQL语法:Writing SQL Queries against Excel files (Excel SQL),将其应用于代码非常简单。

如果您的excel是纯格式的(或生成的),请使用open(".vs/*****/v16/Server/sqlite3/db.lock"): Permission denied函数:

type conversion

如果上述sql不足以满足您的情况,请尝试从以上链接尝试SELECT CDATE(DATETIMECOLUMN) AS DATETIMECOLUMN FROM SOMESHEET$

8. Date formatting

您还可以使用SELECT FORMATDATETIME( [SALE_DATE],1),--read above link for number meanings FORMAT([ACTUAL_DATE],'yyyy-mm-dd') FROM [SALES$] 处理IIF(IsNull(column),'default value',column)值。

如果您的excel可以手动编辑,格式不是固定的,我会将所有数据读取为null,但使用C#逻辑进行解析。

string
本文链接:https://www.f2er.com/3079370.html

大家都在问