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

时间:2010-03-10 14:42:49

标签: excel sql-server-2008 ssis

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

    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行开始。

我用Google搜索了问题,但空洞了。

4 个答案:

答案 0 :(得分:10)

看看:

这些链接有更多详细信息,但我已经在页面中添加了一些文字(以防链接失效)

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

  

问:

     

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

     

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

     

     

最容易的是给每一行一个数字(有点像身份   SQL Server)然后使用条件拆分来过滤掉所有内容   数字< = 5

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

  

问:

     
      
  1. 从Excel到DB表导入数据时是否可以跳过前6行?

  2.   
  3. 此外,Excel数据除以带标题的部分。例如,是否可以跳过每12行?

  4.         

    A:

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

    2.   
    3. 再次,是的,你可以。您可以使用条件拆分导入数据。您将配置条件拆分以查找内容   每一行唯一地将其标识为标题行;跳过行   符合这个'标题逻辑'。另一种选择是全部导入   行,然后使用中的SQL脚本删除标题行   数据库...就像删除每第12行的游标一样。或者你可以   添加种子/增量为1/1的标识字段,然后删除全部   行数完全除以12的行。类似于   该...

    4.   

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

  

问:

     

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

     

与使用csv文件的相同操作('Header Rows to Skip')不同   连接管理器编辑器),我似乎无法找到忽略的方法   Excel文件连接的前6行。

     

我猜测答案可能在其中一个数据流中   转换对象,但我对它们并不熟悉。

     

     

问题登录进行投票1登录进行投票rbhro,实际上有   在上面5行中有2个字段,它们有一些我认为可以阻止的数据   导入者完全忽略这些行。

     

无论如何,我确实找到了解决问题的方法。

     

在我的Excel源对象中,我使用“SQL Command”作为“数据访问”   模式'(当您双击Excel Source对象时它会下拉)。   从那里我能够构建一个查询('构建查询'按钮)   只抓住了我需要的记录。像这样: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转换),   它起作用了。

答案 1 :(得分:1)

我的第一个建议是不接受该格式的文件。要导入的Excel文件应始终以列标题行开头。将其发送给任何提供给您的人并告诉他们修改他们的格式。这大部分时间都有效。

我们为客户和供应商提供有关如何在处理文件之前必须格式化文件的指导,并且他们应尽可能地满足指导。人们通常不知道这样的文件会在处理过程中产生问题(下个月它可能在数据启动之前有六行),并且他们需要了解Excel文件必须以列标题开头,没有空行。数据的中间部分并没有多次重复标题,最重要的是,它们必须每次都以相同的顺序具有相同的列标题。如果他们无法提供,那么您可能没有适合自动导入的内容,因为每次都会以不同的格式获取文件,具体取决于维护Excel电子表格的人的心情。顺便说一句,我们非常努力地从不接收来自Excel的任何数据(只在某些时候工作,但如果他们在数据库中有数据,他们通常可以容纳)。他们还必须知道,他们对电子表格格式所做的任何更改都将导致导入包的更改,并且他们将被收取这些开发更改的费用(假设这些更改是在客户端之外而不是内部客户端)。必须事先传达这些更改并安排开发人员时间,格式错误的文件将失败并返回给他们以修复,如果没有。

如果这不起作用,我建议您打开文件,删除前两行并将文本文件保存在数据流中。然后编写将处理文本文件的数据流。 SSIS在支持Excel方面做得很糟糕,而且你可以做的任何事情都可以让文件以不同的格式运行,从长远来看会让生活变得更轻松。

答案 2 :(得分:1)

您可以使用Excel Source属性中的OpenRowset属性。 看看这里的详细信息:

SSIS: Read and Export Excel data from nth Row

问候。

答案 3 :(得分:0)

我的第一个建议是不接受该格式的文件。要导入的Excel文件应始终以列标题行开头。将其发送给任何提供给您的人并告诉他们修改他们的格式。这大部分时间都有效。

不完全正确。

SSIS强制您使用该格式,并且通常使用excel

无法正常工作

如果您无法更改格式,请考虑使用我们的高级ETL处理器。

您可以跳过行或字段,然后您可以按照自己的方式验证数据。

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

天空是极限