Ste*_*nie 5 sql-server excel expression ssis etl
我创建了一个 SSIS 包,它从 SQL 中提取数据并将其加载到 excel 中。我在使这个包动态并将数据加载到多个 excel 文件中时遇到问题。
我首先创建了一个执行 SQL 任务,该任务保存所有带有 SQL 代码的文件名:SELECT FileName FROM Files并且其结果集将存储在一个变量中FileNameObj。然后我创建了一个 Foreach 循环容器并在里面添加了一个数据流任务。
Foreach Loop Container 设置: Foreach ADO Enumerator,ADO Object 源变量 - FileNameObj,变量映射 -FileName和索引 - 0。在数据流任务下,我添加了一个 OLE DB Source 和 Excel Destination 指向文件路径:C:\Test\ABC.xlsx。
这是连接管理器属性:
连接字符串:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test\ABC.xlsx;Extended Properties="Excel 12.0;HDR=YES";
延迟验证设置为True
ExcelFilePath是C:\Test\ABC.xlsx
然后我用 PropertyExcelFilePath和 Expression创建了一个表达式:"C:\\Test\\"+ @[User::FileName]+".xlsx"
然后我的ConnectionString更改为:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test\.xlsx;Extended Properties="Excel 12.0;HDR=YES";
我已经在 test 文件夹中创建了所有文件模板(所有文件模板相同)。我收到以下错误:
数据流任务 [Excel 目标 [131]] 中的错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80040E37。
数据流任务 [Excel 目标 [131]] 中的错误:打开“Sheet1$”的行集失败。检查对象是否存在于数据库中。
来自 HRESULT 的异常:0xC02020E8 (Microsoft.SqlServer.DTSPipelineWrap)
我究竟做错了什么?或者甚至可以在 SSIS 中做到这一点?


![3]](https://i.stack.imgur.com/64v0l.jpg)
![4]](https://i.stack.imgur.com/DYshD.jpg)
![5]](https://i.stack.imgur.com/l0cBT.jpg)
![6]](https://i.stack.imgur.com/7WNVT.jpg)
![7]](https://i.stack.imgur.com/GDeva.jpg)
![8]](https://i.stack.imgur.com/jATKU.jpg)
![9]](https://i.stack.imgur.com/6izwF.jpg)



首先,Excel连接字符串的.XLSX格式如下:
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Test\\"+ @[User::FileName]+ ".xlsx; Extended Properties=\"Excel 12.0 Xml;HDR=YES\";"
Run Code Online (Sandbox Code Playgroud)
推荐的方法是(@Nick.McDermaid提到的),将值分配给ExcelFilePath属性
Delay Validation属性设置为True参考
您应该尝试很多事情:
下载链接:Microsoft Access 数据库引擎 2010 可再发行组件
在项目属性中,将 64 位运行时属性更改为 False
检查Sheet1所有模板中是否存在
filepath为变量分配默认值
| 归档时间: |
|
| 查看次数: |
2786 次 |
| 最近记录: |