所以我有一个相对简单的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";
所以在这一点上,所有的连接测试都很好,所有类似的外观应该可以工作。但是,当我执行包时,我遇到以下问题。
为什么这不再适用的任何想法?老实说,我看过整个互联网和SO,我还没有看到有人解释如何做到这一点。是否有一些新命令可以在Excel 2007中删除工作表?
答案 0 :(得分:1)
对于其他可能发现此事的人:
我修复了将数据导出到XLSX文件的问题,将两个执行SQL 任务替换为两个文件系统任务。一个删除现有文件,另一个将“模板”Excel文件(基本上只是一个带有列标题的空电子表格)复制到报告目录。
然后我使用数据流任务将数据导出到新模板文件。
不是我理想的解决方案,我更喜欢使用一个文件并重新创建表的旧方法。但是,显然这不再是Excel 2007中的选项,并且使用模板文件的文件系统任务方法将起作用。
我在这份工作中找到的两个最有用的资源是: