想使用 ssis 将 excel 文件数据插入表中 - 格式问题

Posted

技术标签:

【中文标题】想使用 ssis 将 excel 文件数据插入表中 - 格式问题【英文标题】:Want to insert excel file data into table using ssis - format problem 【发布时间】:2011-09-16 15:13:22 【问题描述】:

我创建了一个 SSIS 包,我使用“excel 源”获取 excel 文件,但我的问题是我需要从 excel 文件中获取 B7 值并将其插入数据库表中,请帮助,因为

B7 值由表达式生成:=MAX($B$32:C284)

嗨,我想取 date 的值,即 '8/26/2011'NAV 的值,即 '93737452.52'

并想插入到表中,我正在使用'excel source ' 来连接 excel 文件,现在选择 'Data access mode' in 'Excel source editor' as 'SQL command'

现在我需要编写什么命令来获取'date''NAV'value,因为我已经粘贴了 excel 文件的图片,请让我知道进一步的步骤。

【问题讨论】:

您应该将 B7 设为命名范围,然后它将作为数据源上的另一个表提供 我试过 select B7 from FROM [Sheet1$] 但它不工作请详细说明示例或任何线程:( 【参考方案1】:

由于您只需要电子表格中的 2 个非常具体的单元格值,因此我建议使用 脚本组件 仅从这些单元格中获取值,而不是使用 Excel 源。 Excel Source 真的是用来获取一堆布局一致的行和列,而不是用来挑选单个单元格。

为此,首先从工具箱的数据流转换部分拖动一个脚本组件。出现选择脚本组件类型对话框时,选中第一个选项“Source”。

接下来,编辑此脚本组件并从最左侧的列中选择 Inputs & Outputs,然后添加您需要的 2 个输出列,并为每个列设置正确的数据类型。

然后单击“脚本”选项,选择您的语言(在本例中我选择了 Visual Basic 2008),然后单击编辑脚本按钮。

当 IDE 启动时,添加对 Microsoft.Office.Interop.Excel 的引用,并在脚本顶部为此添加 Imports 语句。然后在CreateNewOutputRows 例程中,获取对您的工作簿和工作表的引用,并使用AddRow() 方法从您想要的特定单元格中输出值。从下面的代码中可以看出,我直接从单元格 b7 和 c7 中获取值并将它们转换为正确的类型。

保存您的脚本并退出 IDE,您现在可以将此脚本组件用作数据库插入的源代码:

脚本将只从您指定的单元格中读取您想要的 2 个值,并将它们提供给数据流目标。

虽然这看起来比在数据流中放置 Excel 源要多得多,但它为您提供了更多的灵活性和控制力。

【讨论】:

【参考方案2】:

如果您拥有的文件可以修改,您可以为单元格命名B7D7(例如,您可以选择名称“日期”和“导航”)。为此,您需要右键单击单元格,然后单击“命名范围”。

完成此操作后,您可以选择这些名称(“日期”和“NAV”),就像它们是 Excel 文件的表格一样。因此,您可以使用select * from FROM [Date$],或者如果您将数据访问模式选择为“表格或视图”,则可以作为另一张工作表使用。

【讨论】:

+1 比我提出的解决方案简单得多。但是你需要“日期”之后的 $ 吗?查询不应该是SELECT * FROM [Date]吗? @PaulStock - 我认为你是对的,应该只是select * from [Date];但我不在安装了 SSIS 的计算机上,所以我真的不记得查询该范围的正确方法。无论如何,op 应该意识到这一点并尝试您的方式,谢谢!【参考方案3】:

如果文件的格式不固定(即前导空白行/列),那么我建议您将列名合并到一个字段中并删除空白元素以简化 SSIS。

如果文件必须保持现有格式,请将 Excel 源对象中的数据访问模式更改为 SQL 命令,然后使用类似于以下内容的内容排除空行;

SELECT        F2, F3
FROM          [Sheet1$]
WHERE        (F2 IS NOT NULL) AND (F2 <> 'USD P&L' and F2 <> 'Date')

您必须使用数据转换控件来理解生成的数据类型。

【讨论】:

谢谢!我已经搜索并获得了excel sourceOpenRowset() 属性,用于跳过行:)【参考方案4】:

能否强制 Excel 保存为 SaveAs() 并选择 .csv 格式?

我相信这只会保存价值。

【讨论】:

以上是关于想使用 ssis 将 excel 文件数据插入表中 - 格式问题的主要内容,如果未能解决你的问题,请参考以下文章

SSIS - 将数据从 Excel 导出到 sql 表

使用ssis导入文本文件时如何插入主键

无法使用 SSIS 快速加载选项从 Excel 源加载 Netezza 中的数据

SSIS - 将Excel与数据库进行比较

如何提高在SSIS中向表中插入数据的性能

如何使用 SSIS 将多个表中的数据插入到多个表中?