1

所以我有一个相对简单的 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 源],将所有内容转换为 unicode 字符串,并将数据导出到 Excel 目标。

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

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

我发现我可以通过将Execute SQL Tasks的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 文件。

因此,根据 Microsoft,我必须更改我的Execute SQL Tasks以使用以下连接字符串:

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. Drop Sheet Execute SQL Task 根据 BIDS 成功完成。但是,它实际上不再将工作表放入 Excel 文件中。它确实删除了工作表中包含的所有数据。
  2. 由于#1,创建工作表执行 SQL 任务失败,因为工作表实际上从未被丢弃。

任何想法为什么这不再起作用?老实说,我已经查看了整个互联网和 SO,但我还没有看到有人解释如何做到这一点。是否有一些新命令可以在 Excel 2007 中删除工作表?

4

1 回答 1

1

对于其他可能找到此内容的人:

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

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

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

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

SSIS - Excel 2007 连接指南

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

于 2012-09-19T15:32:35.200 回答