Visual Studio 2017 ETL项目无法识别.xlsx及仅支持.xls问题求助
解决Visual Studio 2017 SSIS导出.xlsx文件的两个问题
针对.xlsx工作表无法识别及仅支持.xls的解决方案
1. 修正Excel连接管理器配置
- 打开Excel连接管理器的属性,检查
ConnectionString是否使用支持.xlsx的驱动,正确格式如下:
其中Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\YourTargetFile.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;"Excel 12.0 Xml对应.xlsx格式,HDR=YES表示文件第一行为列标题。若连接管理器默认使用Excel 8.0(对应.xls),手动替换连接字符串即可。 - 配置时确保目标.xlsx文件处于关闭状态,SSIS需要独占文件访问权,打开的文件会导致工作表识别失败。
2. 手动指定工作表名称
若自动识别工作表失败,可通过变量指定:
- 在Excel目标编辑器中,选择
Table or view name variable选项。 - 创建字符串变量,值为工作表名称加
$(如Sheet1$);若工作表名称含空格,格式为[Sales Data$]。 - 绑定变量后,即可正常映射数据列。
3. 确认运行时位数与驱动适配
- 打开项目属性→调试,将
Run64BitRuntime设置为True,确保运行时匹配64位环境。 - 若系统安装了32位Office,需通过被动安装命令部署64位的Microsoft Access Database Engine 2016 Redistributable,避免版本冲突:
AccessDatabaseEngine_X64.exe /passive
4. 替代方案:CSV转xlsx
若上述方法仍无法解决,可先导出为CSV再转换:
- 使用Flat File目标将数据导出为CSV文件,配置分隔符为逗号、文本限定符为双引号,确保列数据完整。
- 添加脚本任务,使用EPPlus库将CSV转换为.xlsx,示例代码:
需在脚本任务中添加EPPlus引用,可通过NuGet安装该库。using OfficeOpenXml; using System.IO; public void Main() { string csvFilePath = @"C:\ExportedData.csv"; string xlsxFilePath = @"C:\FinalData.xlsx"; var csvFile = new FileInfo(csvFilePath); var xlsxFile = new FileInfo(xlsxFilePath); using (var excelPackage = new ExcelPackage(xlsxFile)) { var worksheet = excelPackage.Workbook.Worksheets.Add("ExtractedData"); worksheet.Cells["A1"].LoadFromText(csvFile, new ExcelTextFormat { Delimiter = ',', TextQualifier = '"', HasHeader = true }); excelPackage.Save(); } Dts.TaskResult = (int)ScriptResults.Success; }
内容的提问来源于stack exchange,提问作者Tomás Luna Ulloa
相关产品推荐
相关产品推荐

