加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SSIS Excel的多Sheets导入数据库

(2011-03-09 15:34:13)
标签:

ssis

杂谈

分类: 技术讨论区-BI

首先,非常感谢Pedro Perfeito的分享:

www.pedrocgd.blogspot.com

www.biresort.net/blogs/pedrocgd

 

Excel导入数据库在ETL中,经常会遇到。这次要完成的是从一个Excel里多个相同结构Sheets导入。

 

http://filer.blogbus.com/5213599/5213599_12986230227.jpgExcel的多Sheets导入数据库" />如我需要导入16Sheets的数据。

这里,我们其实需要分两步操作:

1.获取Excel文件里所有Sheets的名称。

2.利用Foreach Loop Container组件,循环获取每个Sheet的名称,并作为Excel读数据的来源。

 

所以Package包的工作流程按以下图所示:

 

http://filer.blogbus.com/5213599/5213599_1298625271a.jpgExcel的多Sheets导入数据库" />另外,我们需要两个参数,用来保存Sheets列表与每个Sheet的名称

 

http://filer.blogbus.com/5213599/5213599_12986252794.jpgExcel的多Sheets导入数据库" /> 

至此,准备工作已经完成了。接下来,让我们具体细化操作吧。

1.添加一个Data Flow Task,命名为“DFT Get worksheet names”,然后打开它。

  1.1添加Script Component作为源,命名为“SCR Get worksheet names”

  1.2进入sript transformation editor ,Inputs and Outputs栏里添加一列输出列“colSheet”,此列保存最后获取的所有Sheets的名称。因为我用到的ExcelSheet名包含中文,所以这里我将输出类型设成Unicode string

 http://filer.blogbus.com/5213599/5213599_1298625286d.jpgExcel的多Sheets导入数据库" />

  1.3同样,在sript transformation editor里,选择Connection Manager栏,添加一个Connection Manager,作为Excel的连接。

http://filer.blogbus.com/5213599/5213599_1298624293w.jpgExcel的多Sheets导入数据库" />

 

  1.4 进入sript transformation editor,进入脚本编辑。这里我使用了C#语言编写Excel操作。

 

http://filer.blogbus.com/5213599/5213599_1298624301z.jpgExcel的多Sheets导入数据库" /> 

   1.5如果需要对输出的Sheets列表进行筛选,则可以添加condition split component.

 

http://filer.blogbus.com/5213599/5213599_12986253099.jpgExcel的多Sheets导入数据库" />

   1.6最后,添加recordset destination component组件在内存中保存Sheets列表。

 

  1.7advanced editor of recordset destination中,选择Component Properties栏,设置之前设置好的variable,即存入objWorkSheets中。

http://filer.blogbus.com/5213599/5213599_12986253172.jpgExcel的多Sheets导入数据库" />

  1.8advanced editor of recordset destination中,选择Input Columns栏,Input Column选择colSheet

http://filer.blogbus.com/5213599/5213599_1298625324x.jpgExcel的多Sheets导入数据库" />

 

   1.9至此,完成了获取Excel Sheets列表名的全过程

 

http://filer.blogbus.com/5213599/5213599_1298625332m.jpgExcel的多Sheets导入数据库" /> 

2.添加Foreach Loop Container,命名为“FELC Foreach Worksheet”

   2.1Foreach Loop Editor中,选择Collection栏,并设置枚举属性为“Foreach ADO Enumerator”

   2.2Foreach Loop Editor,选择Collection栏,设置ADO object source variable为之前创建的“objWorkSheets”,即设置循环的列表

   2.3Foreach Loop Editor,选择Collection栏,选择“Rows in the first table”,因为我们的列表只要一张Table里。

http://filer.blogbus.com/5213599/5213599_1298625339h.jpgExcel的多Sheets导入数据库" />

 

   2.4Foreach Loop Editor,选择Variables Mappings栏,在vaiable栏中,选择之前创建过的“uvWorkSheet”,即每次循环读取一个Sheet的名称,并将它赋给“uvWorkSheet”

 

http://filer.blogbus.com/5213599/5213599_1298625355o.jpgExcel的多Sheets导入数据库" /> 

3.添加一个Data Flow Task,命名为“DFT Extract data form Excel”。读取每个Sheet的数据

    3.1添加一个Excel Source Component,命名为“EX_SRC Get each worksheet data”

    3.2Excel Source Component属性设置里,选择AccessMode“OpenRowset From varable”

http://filer.blogbus.com/5213599/5213599_1298624363o.jpgExcel的多Sheets导入数据库" />

 

   3.3双击Excel Source Component,进入Excel Source Editor页面,选择Connection Manager栏,设置OLE DB Connection Manager为之前创建好的Excel connection(这里命名为"cmExcel")

   3.4进入Excel Source Editor页面,选择Connection Manager栏,设置Data access mode“Table name and view name variable”

   3.5进入Excel Source Editor页面,选择Connection Manager栏,设置Variable name“uvWorkSheet”,这里就是根据读取的“uvWorkSheet”值,对每个Sheet读数据。

http://filer.blogbus.com/5213599/5213599_1298625339h.jpgExcel的多Sheets导入数据库" />

 

   3.6设置Columns,至此整个过程完成了。

 

另外,因为我们将每个Sheet名存放在“uvWorkSheet”中,所以,我们其实也可以获取它的值,并在脚本中使用,如:

 

http://filer.blogbus.com/5213599/5213599_1298625376x.jpgExcel的多Sheets导入数据库" /> 

这里,还有分参考资料是关于Excel的几个操作。

http://technet.microsoft.com/en-us/library/ms403358.aspx

 

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有