【问题标题】:Script task problem listing excel files in a directory脚本任务问题列出目录中的excel文件
【发布时间】:2019-02-22 19:23:45
【问题描述】:

问题:

我的 D: 驱动器上的文件夹中有 Excel 表格。我想在脚本任务中查看变量中的所有 excel 文件。

SSIS 变量:

ReadOnly: Folderpath
Read and Write only: ExcelFiles

C# 代码:

const string FILE_PATTERN = "*.xlsx";

string excelFolder;
string[] excelFiles;

excelFolder = Dts.Variables["ExcelFolder"].Value.ToString();
excelFiles = Directory.GetFiles(excelFolder, FILE_PATTERN);

Dts.Variables["ExcelFiles"].Value = excelFiles;
//MessageBox.Show(excelFiles.ToString());

Dts.TaskResult = (int)ScriptResults.Success;

我想知道为什么这段代码不起作用。我还看到 string[] 没有捕捉到任何东西。

我们将不胜感激。

谢谢

【问题讨论】:

  • 您正在寻找 Excel 文件,对吗?不是 .sql 文件的 FILE_PATTERN 字符串吗?
  • @userfl89 很抱歉,它是 excel 扩展名(.xlsx),但它甚至无法运行。我也在尝试使用不同的扩展名,但它不起作用。
  • 为什么不在 SSIS 枚举文件的 foreach 循环中尝试做任何事情?

标签: c# excel ssis etl script-task


【解决方案1】:

试图找出问题

我认为您的代码看起来不错,但需要改进:

const string FILE_PATTERN = "*.xlsx";

string excelFolder;
string[] excelFiles;

excelFolder = Dts.Variables["User::FolderPath"].Value.ToString();
excelFiles = Directory.GetFiles(excelFolder, FILE_PATTERN,SearchOption.AllDirectories);

Dts.Variables["User::ExcelFiles"].Value = excelFiles;
//MessageBox.Show(excelFiles.ToString());

Dts.TaskResult = (int)ScriptResults.Success;
  1. 首先,您将ExcelFolder 作为变量名传递,而正如您所提到的,它应该是FolderPath
  2. 第二个改进是选择SearchOption.AllDirectories,因为它可以在子目录中找到excel文件,而不是在主目录中。
  3. 如果变量是用户变量,则添加变量修饰符User::

如果这些建议不起作用,请检查 FolderPath 值是否合适。

更好的方法

如果您希望循环遍历 excel 文件,那么您应该使用 Foreach 循环容器而不是脚本任务来实现这一点。有很多文章一步一步描述整个过程:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    相关资源
    最近更新 更多