具有日期值的Excel单元格无法通过SSIS正确导入

时间:2011-10-14 18:40:40

标签: sql-server-2008 excel ssis

我有一个Excel '97电子表格,由外部自动化流程生成,我想通过SSIS导入到SQL [2008 R2]表中。我导入的列包含某些单元格中的文本值和其他单元格中的日期值。为了连接到Excel数据,我有一个“Excel源”数据流源,其中OpenRowset属性已设置为特定的列范围:Sheet1 $ A1:A100。我在Excel Source之后直接添加了一个网格数据查看器,以便我可以查看“原始”结果。

执行包时,我查看数据查看器结果,包含日期的所有单元格都以NULL形式出现。奇怪的是,文本字段和数字字段很好,并在数据查看器中正确显示。如果我在日期值前加上一个引号(撇号),以便将日期视为文本,则会正确导入。如果我右键单击Excel中的某个日期字段并转到“格式化单元格...”,它们都会显示为“日期”。

这些Excel文件是由我无法控制的进程自动生成的,我无法手动编辑每个文件以使其正确导入。在Excel Source的External Columns部分中,该列显示的数据类型为“Unicode string [DT_WSTR]”,因此我认为它只会将其作为文本导入。

我非常感谢有关如何正确导入这些日期值的任何建议。提前谢谢!

1 个答案:

答案 0 :(得分:1)

我不知道在SSIS中是否有一种“好”的方式来处理这种情况,但我可以想到一些或多或少的丑陋想法。为了增加hackiness:

  1. 询问向您提供这些文件的人使用更加数据库友好的格式(而不是列的数据类型在行与行之间变化的格式)。
  2. 如果您提前知道哪些行包含文本以及哪些行将包含日期,您可以尝试多次打开电子表格,每次更改范围以使数据类型保持一致。
  3. 您可以在Excel中手动打开电子表格并将其另存为文本文件;然后将文本文件提供给您的SSIS包。所有日期都将转换为文本(基于您的语言环境)。
  4. 您可以编写Windows脚本以在Excel中打开电子表格并将其另存为文本文件,然后将文本文件提供给SSIS包。
  5. 您可以编写一个SSIS脚本任务,该任务使用Excel自动化模型打开电子表格并以适当的方式处理每个单元格。
  6. 您可以滚动自己的Excel连接管理器,该管理器可以配置为将特定范围内的所有单元格视为文本。 (嗯。这可能是越过黑客和牦牛剃须。)
  7. 我认为#1是最好的长期解决方案,但听起来不会很快发生。也就是说,将电子表格保存为文本至少可以使SSIS能够轻松处理,这可能足以克服当前的障碍。