【问题标题】:Skipping rows when importing Excel into SQL using SSIS 2008使用 SSIS 2008 将 Excel 导入 SQL 时跳过行
【发布时间】:2010-03-10 14:42:49
【问题描述】:

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

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

我用谷歌搜索了这个问题,但没有找到。

【问题讨论】:

    标签: excel sql-server-2008 ssis


    【解决方案1】:

    看看:

    链接有更多细节,但我已经包含了页面中的一些文本(以防链接失效)

    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),然后使用条件拆分过滤掉所有内容 其中数字

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

    问:

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

    2. Excel 数据也是按带有标题的部分划分的。例如是否可以跳过每 12 行?

    答:

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

    2. 再次,是的,你可以。您可以使用条件拆分导入数据。您将配置条件拆分以在 将其唯一标识为标题行的每一行;跳过行 匹配这个“标题逻辑”。另一种选择是全部导入 行,然后使用 SQL 脚本在 数据库...就像一个游标,每 12 行删除一次。或者你可以 添加种子/增量为 1/1 的标识字段,然后删除所有 行号完全除以 12 的行。像 那……

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

    问:

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

    与 csv 文件的相同操作不同(“要跳过的标题行”在 连接管理器编辑器),我似乎无法找到忽略的方法 Excel 文件连接的前 6 行。

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

    答:

    问题 登录投票 1 登录投票 rbhro,其实有 前 5 行中的 2 个字段包含一些我认为阻止的数据 进口商完全忽略这些行。

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

    在我的 Excel 源对象中,我使用“SQL 命令”作为“数据访问” 模式'(双击 Excel 源对象时下拉)。 从那里我能够构建一个查询(“构建查询”按钮) 只抓取了我需要的记录。像这样的东西:选择 F4, F5, F6 从 [Spreadsheet$] WHERE (F4 不为 NULL) AND (F4 'TheHeaderFieldName')

    注意:我最初尝试使用 ISNUMERIC 而不是“IS NOT NULL”,但是 由于某种原因不受支持。

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

    这样就完美地清理了我的数据源。我现在需要做的 在源和目标之间添加了一个数据转换对象 (需要从电子表格中的 unicode 转换的所有内容), 并且成功了。

    【讨论】:

    • 请改进这个答案 - 仅链接的答案不好,这些链接都死了说明了原因。
    • +1 以获得改进的答案。谢谢你。这些链接要求您有一个 msdn 用户或社交用户登录 - 我刚刚得到:502 - Web 服务器在充当网关或代理服务器时收到无效响应。您要查找的页面有问题,无法显示。当 Web 服务器(作为网关或代理)联系上游内容服务器时,它收到了来自内容服务器的无效响应。
    • @Thronk,我不确定发生了什么,但我没有任何特殊登录,也不需要登录即可访问这些链接。
    【解决方案2】:

    我的第一个建议是不要接受这种格式的文件。要导入的 Excel 文件应始终以列标题行开头。将其发回给提供给您的任何人,并告诉他们修复其格式。这在大多数情况下都有效。

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

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

    【讨论】:

      【解决方案3】:

      我的第一个建议是不要接受这种格式的文件。要导入的 Excel 文件应始终以列标题行开头。将其发回给提供给您的任何人,并告诉他们修复其格式。这在大多数情况下都有效。

      不完全正确。

      SSIS 强制您使用该格式,但它经常无法在 excel 中正常工作

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

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

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

      天空是极限

      【讨论】:

      • 请在您提及产品的每篇文章中明确提及您与产品的从属关系。另外,请不要使用签名行。
      【解决方案4】:

      您可以只使用可以在 Excel 源属性中找到的 OpenRowset 属性。 详情请看这里:

      SSIS: Read and Export Excel data from nth Row

      问候。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多