如果第一行不是SSIS Excel数据源的日期,则在日期列中读取

时间:2012-01-31 19:49:34

标签: ssis

我正在尝试阅读具有日期列的excel工作表。由于第一行为空,SSIS似乎将列视为数字列。

以下是Excel专栏:

enter image description here

当我在ssis Excel源代码编辑器中预览时,它会显示:

enter image description here

您可以看到我的TermDate列显示为数字而不是日期。非常感谢任何帮助

1 个答案:

答案 0 :(得分:3)

欢迎使用Excel存储日期。 http://www.debugging.com/bug/19252我最终在C#app中使用此功能从数字日期切换到日期时间日期。

    /// <summary>
    /// Seriously?  For the loss
    /// <see cref="http://www.debugging.com/bug/19252"></see>
    /// </summary>
    /// <param name="excelDate">Number of days since 1900-01-01</param>
    /// <returns>The converted days to date</returns>
    public static DateTime ConvertXlsdtToDateTime(int excelDate)
    {
        DateTime dt = new DateTime(1899, 12, 31);

        // adjust for 29 Feb 1900 which Excel considers a valid date
        if (excelDate >= 60)
        {
            excelDate--;
        }

        return dt.AddDays(excelDate);
    }

您可以在脚本转换中使用该公式来生成DateTime值,也可以使用丑陋的表达式来执行相同的操作。已经很晚了,所以我假设你的日期是在假的1900-02-29之后,如上所述

DATEADD("day",TermDate - 1,(DT_DATE)"1899-12-31")

下面是一个使用输入数据的示例,派生列中的上述表达式生成ExcelDate。我带着TermDateAsDate确保按预期匹配日期。

enter image description here