使用SSIS 2008将Excel导入SQL时跳过行

我需要导入如下所示的工作表:

March Orders ***Empty Row Week Order # Date Cust # 3.1 271356 3/3/10 010572 3.1 280353 3/5/10 022114 3.1 290822 3/5/10 010275 3.1 291436 3/2/10 010155 3.1 291627 3/5/10 011840 

列标题实际上是第3行。我可以使用Excel Sourch来导入它们,但我不知道如何指定信息从第3行开始。

我search了这个问题,但空了。

看一看:

链接有更多的细节,但我已经包含了一些来自页面的文本(以防链接死亡)

http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/97144bb2-9bb9-4cb8-b069-45c29690dfeb

问:

当我们通过SSIS将文本文件加载到SQL Server时,我们提供了从源代码中跳过任意数量的前导行并将数据加载到SQL服务器的规定。 是否有任何规定对Excel文件做同样的事情?

我的源Excel文件在前5行中有一些描述,我想跳过它并从第6行开始数据加载。请提供你的想法。

A:

最简单的方法是给每行一个数字(有点像SQL Server中的一个标识),然后使用条件分割来过滤所有数字<= 5

http://social.msdn.microsoft.com/Forums/en/sqlintegrationservices/thread/947fa27e-e31f-4108-a889-18acebce9217

问:

  1. 是否有可能在从Excel导入数据到数据库表跳过前6行,例如?

  2. 另外Excel数据除以标题部分。 是否有可能跳过每十二行?

A:

  1. 是的你可以。 实际上,如果您知道将从Excel文件导入的数字列,则可以非常轻松地完成此操作。 在您的数据stream任务中,您将需要设置Excel连接的“OpenRowset”自定义属性(右键单击您的Excel连接>属性;在属性窗口中,在自定义属性下查找OpenRowset)。 要忽略Sheet1中的前5行并导入列AM,可以为OpenRowsetinput以下值:Sheet1 $ A6:M(注意,我没有为列M指定行号。如果您像,但在我的情况下,行数可以从一个迭代到下一个)

  2. 再次,是的,你可以。 您可以使用条件拆分导入数据。 你可以configuration条件分割来查找每一行中唯一标识为标题行的东西; 跳过匹配这个“标题逻辑”的行。 另一个select是导入所有行,然后使用数据库中的SQL脚本删除标题行…就像每隔12行删除一个光标。 或者你可以添加一个种子/增量为1/1的标识字段,然后删除行号完全除以12的所有行。类似的…

http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/847c4b9e-b2d7-4cdf-a193-e4ce14986ee2

问:

我有一个SSIS包,从一个Excel文件导入数据从第7行开始。

与使用csv文件(Connection Manager Editor中的'Header Rows to Skip')相同的操作,我似乎无法find一种方法来忽略Excel文件连接的前6行。

我猜测答案可能在数据stream转换对象之一,但我不是很熟悉它们。

A:

Questionlogin进行投票1login进行投票rbhro,实际上在上面的5行有2个字段有一些数据,我认为防止import商完全忽略这些行。

无论如何,我确实find了解决我的问题。

在我的Excel源对象中,我使用“SQL命令”作为“数据访问模式”(双击Excel源对象时将其下拉)。 从那里我能够build立一个查询(“build立查询”button),只抓取我需要的logging。 就像这样:SELECT F4,F5,F6 FROM [Spreadsheet $] WHERE(F4 IS NOT NULL)AND(F4 <>'TheHeaderFieldName')

注意:我最初尝试了一个ISNUMERIC而不是“IS NOT NULL”,但由于某种原因,这不被支持。

在我的情况下,我只对F4不是NULL的行感兴趣(幸好F4在前5行中没有包含任何垃圾)。 我可以用第二个WHERE子句跳过整个标题行(第6行)。

这样就完美地清理了我的数据源。 我现在需要做的只是在源和目标之间添加一个数据转换对象(在电子表格中需要从unicode转换的所有东西),并且工作正常。

我的第一个build议是不接受这种格式的文件。 要导入的Excel文件应始终以列标题行开始。 发回给谁提供给你,并告诉他们修正他们的格式。 这在大多数情况下是有效的。

我们向客户和供应商提供关于如何处理文件必须先格式化的指导,并由他们尽可能地遵守指导原则。 人们通常不知道像这样的文件在处理中产生了问题(下个月它可能在数据启动之前有六行),并且需要教育他们:Excel文件必须以列标题开始,在文档中没有空行在数据的中间不重复标题多次,最重要的是,每次都必须具有相同的列标题,并且具有相同的列标题。 如果他们不能提供,那么你可能没有什么东西可以用于自动导入,因为你将每次都以不同的格式获取文件,这取决于维护Excel电子表格的人的心情。 顺便说一下,我们真的很难从不接收任何来自Excel的数据(只在某些时候有效,但如果他们有数据库中的数据,通常可以容纳)。 他们还必须知道,他们对电子表格格式所做的任何修改都会导致导入软件包发生变化,并且会因这些变更(假设这些变更不在客户端而不是内部变更)而被收取费用。 这些更改必须提前与开发人员时间进行沟通,格式错误的文件将会失败,如果不是,则返回给他们修复。

如果这不起作用,我可以build议你打开文件,删除前两行,并保存在数据stream中的文本文件。 然后编写一个处理文本文件的数据stream。 SSIS在支持Excel方面做得很糟糕,任何可以用不同格式获取文件的方法都能使生活更轻松。

您可以使用可以在Excel Source属性中find的OpenRowset属性。 看看这里的细节:

SSIS:从第n行读取并导出Excel数据

问候。

我的第一个build议是不接受这种格式的文件。 要导入的Excel文件应始终以列标题行开始。 发回给谁提供给你,并告诉他们修正他们的格式。 这在大多数情况下是有效的。

不完全正确。

SSIS迫使你使用这种格式,而且很多时候它不能正确的使用excel

如果您不能改变格式,请考虑使用我们的高级ETL处理器。

您可以跳过行或字段,并且可以按照自己想要的方式validation数据。

http://www.dbsoftlab.com/etl-tools/advanced-etl-processor/overview.html

天空才是极限