5

我有一个文件夹,其中包含每天更换的多个 Excel 文件。我需要一个总行数,它为我提供文件夹中每个单独 Excel 文件的行数总和(即,如果有 3 个文件,每个文件有 10 条记录,我需要 30 的结果计数)。然后,我需要每天运行此程序包以将单个记录添加到日志表中,该日志表将为我提供文件夹中的每日记录计数。我一直在尝试 Foreach 循环容器和 ADO 枚举器,但似乎无法找到解决方案。

4

2 回答 2

1

有一个很好的解决方案,您无需使用任何脚本任务即可应用。您只需要使用一个“Foreach 循环容器”、一个“数据流任务”和一个“执行 SQL 任务”

定义变量:

  • V_FilesPath-> (String) 将保存文件所在的路径
  • V_FileName-> (String) 将填充 Foreach 容器中的文件名
  • V_RowCount (Int)
  • V_FileRowCount (int)
  • V_TotalRecords (int)

定义 Foreach:

包模拟

Foreach 定义

将源文件映射到 RowCount 组件并选择变量:V_FileRowCount 源定义

“执行 SQL 任务”中将结果集更改为“单行” SQL 任务定义

将 ResultSet 映射到以下变量: 在此处输入图像描述

“执行 SQL 任务”的表达式部分选择以下属性表达式: 在此处输入图像描述

在表达式窗格中发出以下问题:

" SELECT " + (DT_STR,10,1252)@[User::V_TotalRecords] + " + " + (DT_STR,10,1252) @[User::V_FileRowCount] + ", 1 + " +(DT_STR,10,1252 ) @[用户::V_RowCount]

一旦你完成了上述你就完成了!

如果您希望查看结果,请添加一个脚本任务(只是为了显示结果)

脚本任务定义

并粘贴以下脚本代码而不是以“Public Void Main”开头的部分

        public void Main()
{

    try
    {

        string Variables = "Loop Counter: " + Dts.Variables["User::V_RowCount"].Value.ToString() + "                       Total Records in all files: " + Dts.Variables["User::V_TotalRecords"].Value.ToString();
        MessageBox.Show(Variables).ToString();

    }



    catch (Exception Ex)
    {

        MessageBox.Show(Ex.Message);

    }
}
于 2016-12-18T19:55:55.347 回答
0

您可以使用行计数组件。

在控制流中创建数据流任务。然后,在数据流中,使用连接到行计数组件的 Excel 源组件。创建一个整数变量,双击 Row Count 组件并将变量分配给它。

如果您正确配置了 Excel 源(使用 Excel 连接管理器),您创建的变量将保存您传递的 Excel 文件中的行数。

在此处输入图像描述

于 2016-01-28T18:14:24.350 回答