2

提前感谢任何人可以提供的任何帮助,

(前言:我已经熟悉 TypeGuessRows 注册表调整(我将其设置为 0;XL 扫描整个列以确定数据类型)和 IMEX=1 扩展属性(我默认使用它))

我正在为客户开始一个正在进行的项目:

  • 客户发送 10 个 xlsx 文件,每年 1 个。
  • 大多数(如果不是全部)文件有 12 张……每月 1 张。
  • 所有文件中的所有工作表都具有完全相同的列数,列标题完全相同,顺序完全相同。
  • 客户很可能会在未来 3 年内定期发送新数据(希望采用相同的格式)。

循环通过多个 XL 文件,然后循环通过多个 XL 表不是问题。我过去做过很多次。默认情况下,我的 XL 文件的 SSIS 模板是这样设置的。

我遇到的问题是列的数据类型可以从一张纸到另一张纸改变。例如,在大多数工作表上,日期列:

  • 没有 NULL/空白日期
  • 所有日期格式为 m/d/yyyy
  • XL/SSIS 分配日期 [DT_DATE]数据类型

...但是,在同一文件中的某些工作表上,同一日期列...

  • 没有 NULL/空白日期
  • 大多数日期格式为 m/d/yyyy
  • 一些日期格式为一般/数字(2002 年 11 月 15 日 = 37575)
  • XL/SSIS 分配Unicode 字符串 [DT_WSTR]数据类型

如果我没记错的话,当我运行 SSIS 包时,当数据类型发生变化时它会抛出错误。

是否可以强制传入列的数据类型(OLE DB 源的高级编辑器>输入和输出属性表 >输入和输出窗格 > OLE DB 源输出>外部列)为 unicode,以便在 XL/SSIS 时包不会出错想改变数据类型?这将容纳所有当前文件和任何未来文件,以防出现相同的不一致格式。

或者我是否被迫:

  • 将所有通用/数字格式的日期更改为日期格式,以便我可以使用一个 SSIS 包导入
  • 将所有格式一致和格式不一致的工作表分成 2 个单独的组,以便使用 2 个不同的 SSIS 包导入

再次感谢任何人提供的任何帮助,

CTB

4

1 回答 1

1

从一种数据类型切换到另一种数据类型似乎不会引发错误,只是一个警告......至少从[DT_DATE][DT_WSTR]并返回。

我无法强制OLE DB Source的传入列的数据类型,但我能够将传出列数据类型设置为[DT_WSTR]OLE DB Source 的高级编辑器>输入和输出属性表 >输入和输出窗格 > OLE DB 源输出>输出列)。这样,该列中的所有日期都被视为数据流中的 unicode 文本,无论其来源如何。

这似乎奏效了。我只需要一个导入包来导入两种类型的工作表/文件。

我希望这对将来的其他人有所帮助...

于 2017-04-07T00:33:44.270 回答