如何让SSIS中Microsoft.Interop.Excel的SaveAs按变量生成正确文件名
问题解决方案
问题根因
你当前生成的文件名不符合预期,核心原因是变量RXcurrentTextFilename的拼接逻辑错误,生成的路径不合法:
- 你在表达式中用下划线
_拼接UNC路径和后续字段,没有使用正确的路径分隔符\,导致Excel无法识别你传入的txtfilename是完整的「路径+文件名」,会自动把当前打开的Excel文件名前缀拼到你传入的名称前,最终出现MyExcelFile.xlsx_MyTextFile.txt的错误命名。
修复步骤
方案1:直接修正SSIS变量表达式
把RXcurrentTextFilename的表达式修改为如下内容,注意SSIS表达式中反斜杠需要转义,要写两个反斜杠:
@[User::RXstagingFolder] + "\\" + @[User::createDate] + @[User::RXtestFilename]
如果业务要求日期前必须带下划线,可以调整为:
@[User::RXstagingFolder] + "\\_" + @[User::createDate] + @[User::RXtestFilename]
方案2:脚本内使用Path类生成路径(更稳妥,避免路径拼接错误)
你可以直接在C#脚本中用.NET内置的System.IO.Path类处理路径拼接,不需要依赖SSIS变量的表达式逻辑,代码修改如下:
// 替换原来的string txtfilename = ... 这一行 string stagingFolder = Dts.Variables["User::RXstagingFolder"].Value.ToString(); string createDate = Dts.Variables["User::createDate"].Value.ToString(); string testFilename = Dts.Variables["User::RXtestFilename"].Value.ToString(); // Path.Combine会自动处理路径分隔符,不需要手动加反斜杠 string txtfilename = System.IO.Path.Combine(stagingFolder, $"{createDate}{testFilename}");
调试校验
修改完成后可以先在脚本中临时加一行弹窗代码,确认生成的路径是否符合预期:
MessageBox.Show(txtfilename);
如果弹窗显示的路径和文件名完全符合你的要求,再删除调试代码正式运行即可。
内容的提问来源于stack exchange,提问作者SidC
相关产品推荐
相关产品推荐

