最具影响力的数字化技术在线社区

51管天下 发表于 2014-10-31 16:55:51

ETL问题解答-SSIS文件操作、Excel转PDF、Zip压缩等

问题:国外一个公共文档服务网站的商业智能开发人员咨询说他想使用SSIS批量完成如下任务该如何处理。1)将source目录下的多个Excel复制到dest目录下;
2)从Excel转换为pdf文件并将pdf文件放入pdfLocation目录下;
3)重命名所有pdf文件;
4)将pdf文件压缩打包成zip,zip文件命名格式为datetime_docUpload.zip(如 20130722_0930_docUpload.zip);
5)将zip文件放置到指定位置zipLocation中,他在服务器DocServer的默认数据库实例(SQL Server 2008R2)中建立了配置表folderSettings(只有一行数据,每列放置一个文件系统绝对路径),并写好一个存储过程sp_ renameFile(输入excel文件名,输出结果是新的excel文件名)。如下://tbl_folderSettings表的SchemaCREATE TABLE .( NULL,
(50) NULL,
(50) NULL,
(50) NULL,
(50) NULL,) ON //sp_ renameFiles存储过程CREATE PROCEDURE .@fileNameReturn varchar(max) output,@oldFileName varchar(max) = ‘defaultOldFileName’ASBEGIN……END解答:1、在SSIS中创建一个仅包含一个控制流的ssis包;2、创建包级别的变量dbAddress,dbName,dbUser,dbPassword,分别表示DocServer服务器的地址(含实例)、数据库名、用户、密码;在部署包时这些变量可导出到SSIS包配置文件中,保证可移植性;3、创建strSource、strDest、strPdfLocation、strZipLocation等4个string类型的包变量;4、使用scriptTask(SSIS脚本任务)或ExecuteSqlTask(SSIS SQL执行任务),从folderSettings表中获取各目录变量的值,并赋值给第3步中相应变量;5、使用ForEach文件循环任务,在strSource变量指向的目录中逐个遍历所有文件,并在ForEach任务里创建curSourceFile、curDestFile、curPdfFile、curNewPdfFileName等变量,代表各目录下当前操作的文件。//Jbean at jbean.org:以下是ForEach Loop循环内的操作:5-1:得到curSourceFile变量值;5-2:使用FileSystem Task(SSIS文件系统任务)的Copy(复制)操作,将Excel文件从strSource目录,并得到curDestFile变量值;5-3:使用ExecuteProcessTask(SSIS执行进程任务),调用PDF转换器可执行文件(如PDFConverter等、PDFCreator等开源工具),将curDestFile文件转换为PDF文件,生成在strPDFLocation目录下,并将本次生成的PDF文件名记入curPdfFile变量中;(如果不想使用外部PDF转换器,可以访问Codeplex网站获取PDF转换SSIS TASK)5-4:使用ExecuteSqlTask(SSIS执行SQL任务)执行存储过程sp_renamefile,输入curPdfFile,从返回结果获得新文件名curNewPdfFileName;5-5:使用FileSystem Task(SSIS文件系统任务)的Rename(重命名)操作,将curPdfFile文件的名称更改为新名curNewPdfFileName;//jbean.org:ForEach循环结束。6、使用scriptTask(SSIS脚本任务),用VB或Csharp脚本(用你熟悉的那个)获取当前时间,格式化并拼接zip文件名YYYYMMDD_hhmm_docUpload.zip,保存在zipFileName变量中;7、使用ExecuteProcessTask(SSIS执行进程任务),调用Zip压缩可执行文件(如7-Zip等开源工具),将strPdfLocation目录下的所有文件压缩到名为zipFileName的zip文件中(如果不想使用外部zip压缩工具,可以访问Codeplex网站获取Zip压缩的SSIS TASK)。http://jbean.org/wp-content/uploads/2013/07/ExceltoPDF_zip_ftp.jpg注:以上SSIS数据抽取包的设计可在SQL Server 2005/2008/2008R3/2012/2014等版本中实现。
页: [1]
查看完整版本: ETL问题解答-SSIS文件操作、Excel转PDF、Zip压缩等