c# - 如何确保 Microsoft.Interop.Excel.Workbook.SaveAs 使用 SSIS 变量以正确的文件名保存文本文件?
问题描述
我在我的 SSIS 包的脚本任务中使用 Microsoft.Interop.Excel 库。脚本任务放置在 For Each 循环容器中,该容器使用文件枚举器集合来迭代给定文件夹中所有后缀为 .xlsx 的文件。
脚本任务运行没有问题,并按预期生成文本文件。但是,文本文件的名称应该从我传递给脚本任务的变量中获得,例如 MyTextFile.txt。相反,脚本任务会创建将其命名为 MyExcelFile.xlsx_MyTextFile.txt 的文本文件。预期的结果是创建一个名为 MyTextFile.txt 的文本文件。
我的脚本任务的内容如下:
Using Excel = Microsoft.Interop.Excel;
public void Main()
{
try {
Excel.Application app = new Excel.Application();
app.DisplayAlerts = false;
Excel.Workbooks workbooks = app.Workbooks;
Excel.Workbook workbook = workbooks.Open(Dts.Variables["User::Filename"].Value.ToString());
Excel.Sheets worksheets = (Excel.Sheets)workbook.Sheets;
Excel.Worksheet worksheet = workbook.Sheets[1];
worksheet.Select(System.Reflection.Missing.Value);
string txtfilename = Dts.Variables["User::RXcurrentTextFilename"].Value.ToString();
workbook.SaveAs(txtfilename, Excel.XlFileFormat.xlTextWindows);
workbook.Close();
workbooks.Close();
app.Quit();
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.FinalReleaseComObject(worksheets);
Marshal.FinalReleaseComObject(worksheet);
Marshal.FinalReleaseComObject(workbooks);
Marshal.FinalReleaseComObject(workbook);
Marshal.FinalReleaseComObject(app);
GC.Collect();
GC.WaitForPendingFinalizers();
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
Console.WriteLine(ex.ToString());
Dts.TaskResult = (int)ScriptResults.Failure;
GC.Collect();
GC.WaitForPendingFinalizers();
}
Dts.TaskResult = (int)ScriptResults.Success;
}
该变量RXcurrentTextFilename
定义为由 UNC 路径、文件名、当前日期和文件扩展名组成的表达式,如下所示:
@[User::RXstagingFolder] + "_" + @[User::createDate]+@[User::RXtestFilename]
请注意,第一个变量包含 UNC 路径,第二个变量以 yyyymmdd 格式返回当前日期,第三个变量是静态值 MyTextFile.txt。
如何确保脚本任务使用与我的变量中定义的命名约定完全相同的文件创建文件?
解决方案
推荐阅读
- django - Django ModelChoiceField 验证错误
- angular - 如何使用 webpack 忽略打字稿错误?
- r - RStudio 探索性因子分析:编写一个提取越来越多因子的函数
- android - 给定可为空的 Int 时,Kotlin when 具有大范围的语句冻结
- css-selectors - 在三星 Galaxy S5 的远程调试中选择一个不突出显示实际元素位置的元素
- jenkins - 如何在没有插件的情况下将工件从工件复制到 Jenkins 中的远程服务器?
- eclipse - 在 Jenkins 中复制 Eclipse 构建
- node.js - 在 Google Sheets API V4 中更新列
- vue.js - 渲染中的 Vue 错误:“RangeError:无效的数组长度”
- javascript - 将前缀附加到输入值