2011-10-14 20 views
0

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

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

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

我非常感谢任何关于如何让这些日期值正确导入的建议。先谢谢你!

+0

你说你的列有文本和日期值的混合,并且列被导入为“字符串”。由于日期作为数字值存储在Excel中(并且只显示为文本),所以也许这就是为什么您的日期以空值显示的原因。一个好的开始将是至少让你的列数据类型一致。 –

+0

听起来像问题存在于任何创建Excel文档的过程中。这些值的格式是什么?复制并粘贴进程为您踢出的值的示例,以便我们可以看到如何将它写入Excel文件。 – KreepN

回答

1

我不知道是否有一种“好”的方法来处理SSIS中的这种情况,但我可以想到一些或多或少的丑陋想法。按照越来越黑客的顺序:

  1. 询问谁提供这些文件给你使用更好的数据库友好格式(而不是列的数据类型在行之间变化的)。
  2. 如果您事先知道哪些行将包含文本,哪些包含日期,您可以尝试多次打开电子表格,每次更改范围以使数据类型保持一致。
  3. 您可以在Excel中手动打开电子表格并将其保存为文本文件;然后将文本文件提供给您的SSIS包。所有日期将被转换为文本(基于您的区域设置)。
  4. 您可以编写Windows脚本在Excel中打开电子表格并将其保存为文本文件,然后将文本文件提供给您的SSIS包。
  5. 您可以编写一个SSIS脚本任务,使用Excel自动化模型打开电子表格并以任何适当的方式处理每个单元格。
  6. 您可以推出自己的Excel连接管理器,该管理器可以配置为将特定范围内的所有单元格视为文本。 (嗯,这可能会越过黑客和牦牛剃须。)

我认为#1是最好的长期解决方案,但它听起来并不像它会很快发生。也就是说,将电子表格保存为文本将至少可以使SSIS轻松处理这些内容,而这可能足以克服直接障碍。

+0

首先,感谢所有伟大的意见和建议。最后,我找到了一篇文章,详细说明它是如何查看前8个字符来确定数据类型的。为了解决这个问题,我在连接字符串的末尾添加了“IMEX = 1”文本 - 请参阅http://support.microsoft.com/kb/194124。一旦我这样做,它正确地导入日期字段。再次,我不能从我的客户更改这个Excel文档的格式,所以我必须这样处理它。再次感谢! – Loki70

+0

不客气 - 并感谢**你**指向IMEX = 1提示! –

相关问题