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

时间:2011-09-16 15:13:23

标签: sql sql-server excel ssis

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

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

enter image description here

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

并希望插入表格我正在使用'excel source '立即获取excel文件连接选择'Data access mode'中的'Excel source editor'作为'SQL command'

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

4 个答案:

答案 0 :(得分:5)

由于您只需要电子表格中的两个非常具体的单元格值,我建议使用脚本组件从这些单元格中获取值,而不是使用Excel源代码。 Excel Source实际上是为了获得一堆行和&一致排列的列,而不是用于挑选单个细胞。

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

enter image description here

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

enter image description here

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

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

enter image description here

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

enter image description here

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

虽然这可能看起来比在数据流中删除Excel Source更多的工作,但它为您提供了更多的灵活性和控制。

答案 1 :(得分:2)

如果您可以修改您拥有的文件,您可以为单元格B7D7指定名称(例如,您可以选择名称“日期”和“NAV”)。为此,您需要右键单击该单元格,然后单击“命名范围”。 Naming a range on excel

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

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:1)

您可以强制Excel为SaveAs()并选择.csv格式吗?

我相信这只会节省价值。