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

所以我有一个相对简单的SSIS工作,做到以下几点:

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

drop table `Table` 

执行SQL任务 – 在Excel文件中创build工作表

 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)) 

数据stream任务 – 将数据从SQL导出到Excel

这只是运行SQL查询[OLE DB源],将所有内容都转换为Unicodestring,并将数据导出到Excel目标。

注意:这个工作在BIDS 2005中完全没有错误地执行。但是,当我最初尝试在BIDS 2008(32位模式)下运行它时,我在上面提到的“拆卸表”和“创build表执行SQL任务”

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

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

 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文件。

所以, 每个微软 ,我不得不改变我的执行SQL任务使用以下连接string:

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

我还必须更新我的Excel目标步骤的连接pipe理器(它支持每个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"; 

所以在这一点上,所有的连接testing良好,所有似乎都应该工作。 但是,当我执行包时,我有以下问题。

  1. 删除工作表执行SQL任务根据BIDS成功完成。 但是,它实际上并没有将工作表放在Excel文件中。 它会删除表单中包含的所有数据。
  2. 由于#1,创build工作表执行SQL任务失败,因为工作表从未实际上被删除。

任何想法,为什么这不工作了? 老实说,我已经看遍了互联网,所以我还没有看到有人解释如何做到这一点。 是否有一些新的命令在Excel 2007中放置工作表?

对于任何人可能会发现这一点:

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

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

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

我从事这项工作时发现的两个最有用的资源是:

SSIS – Excel 2007连接指南

使用SSIS文件系统任务复制/重命名文件