SSIS - SQL任务,ADO连接和Excel xlsx文件问题

时间:2012-09-18 20:52:09

标签: sql excel ssis excel-2007

所以我有一个相对简单的SSIS工作,它执行以下操作:

执行SQL任务 - 从Excel文件中删除工作表

drop table `Table`

执行SQL任务 - 在Excel文件中创建工作表

CREATE TABLE `Table` (
`Col1` VarChar (255) , 
`Col2` Long , 
`Col3` VarChar (84) , 
`Col4` VarChar (60) , 
`Col5` VarChar (255) , 
`Col6` VarChar (20) , 
`Col7` VarChar (255) , 
`Col8` VarChar (255) ,
`Col9` VarChar(255))

数据流任务 - 将数据从SQL导出到Excel

这只是运行SQL查询[OLE DB Source],将所有内容转换为unicode字符串,并将数据导出到Excel目标。

注意:此作业在BIDS 2005中没有错误地执行完美。但是,当我最初尝试在BIDS 2008(32位模式)中运行它时,我在Drop Sheet和Create Sheet上都出现以下错误执行SQL 上面提到的任务:

  

警告:多步OLE DB操作生成错误。检查每个   OLE DB状态值(如果可用)。没有工作。

我发现我可以通过将执行SQL任务 ConnectionType 属性更改为 ADO 并使用以下连接字符串来解决此问题:

Data Source=\\<filelocation>\<ExcelFileName>.xls;Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 8.0;

此时,我回到了BIDS 2008中执行的程序包,没有任何错误。一切都很棒!

然后我尝试将作业从导出更新到Excel 97-2003 .xls文件,再导出到Excel 2007 .xlsx文件。

所以,per Microsoft,我必须更改执行SQL任务以使用以下连接字符串:

Data Source=\\<filelocation>\<ExcelFileName>.xlsx;Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 XML;

我还必须更新 Excel目标步骤的连接管理器(它支持每个Microsoft的BIDS 2008中的Excel 2007格式)到以下内容:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\<file location>\<Excel filename.xlsx;Extended Properties="Excel 12.0 XML;HDR=YES";

所以在这一点上,所有的连接测试都很好,所有类似的外观应该可以工作。但是,当我执行包时,我遇到以下问题。

  1. 根据BIDS,Drop Sheet执行SQL任务成功完成。但是,它实际上不会将工作表丢弃在Excel文件中。它会删除表格中包含的所有数据。
  2. 由于#1,创建工作表执行SQL任务失败,因为工作表从未实际丢弃。
  3. 为什么这不再适用的任何想法?老实说,我看过整个互联网和SO,我还没有看到有人解释如何做到这一点。是否有一些新命令可以在Excel 2007中删除工作表?

1 个答案:

答案 0 :(得分:1)

对于其他可能发现此事的人:

我修复了将数据导出到XLSX文件的问题,将两个执行SQL 任务替换为两个文件系统任务。一个删除现有文件,另一个将“模板”Excel文件(基本上只是一个带有列标题的空电子表格)复制到报告目录。

然后我使用数据流任务将数据导出到新模板文件。

不是我理想的解决方案,我更喜欢使用一个文件并重新创建表的旧方法。但是,显然这不再是Excel 2007中的选项,并且使用模板文件的文件系统任务方法将起作用。

我在这份工作中找到的两个最有用的资源是:

SSIS - Excel 2007 Connection Guide

Copy/Rename Files Using SSIS File System Task