反馈已提交

网络繁忙

循环多次读取Windows环境文件同步数据

  • 文档创建者:Wendy123456
  • 历史版本:7
  • 最近更新:Wendy123456 于 2024-08-05
  • 1. 概述

    1.1 应用场景

    用户 Windows 系统中有多个相同格式的 Excel 文件,需要读取所有文件数据并进行 行转列 操作。

    由于 文件输入 算子批量读取文件时,是将所有文件数据上下合并,合并后的数据会存在重复值,行转列时会报错(行转列算子中,要求「待行转列」的字段名称不能重复)。

    1.2 实现思路

    每次读取一个 Excel 文件,并对读取后的数据进行处理,循环执行该过程,避免一次性读取所有文件,导致出现数据重复无法进行行转列操作问题。

    注:本文方案适用于 4.0.29 及之后版本。

    1699262544394970.png

    2. 操作步骤

    2.1 准备工作

    2.1.1 配置数据连接

    1)由于我们需要通过执行 Bat 脚本获取待扫描文件夹内的所有 Excel 的文件名,在此之前,需要先配置 SSH 协议数据连接,远程连接目标服务器,便于执行远程服务器上的 Bat 脚本。

    详情请参见:配置SSH协议数据连接

    2.png

    2)Bat 脚本执行成功后,会在扫描文件夹内生成一个excel_name.CSV文件,内容为待扫描文件夹内的所有 Excel 的文件名。

    我们需要将文件名输出为参数,传入「循环容器」节点,一个个读取 Excel 文件数据。输出为参数前,需要先读取excel_name.CSV文件数据。

    本文示例中,通过 服务器本地目录 数据连接读取excel_name.CSV文件数据。

    7.png

    2.1.2 待读取文件存放位置

    待读取 Excel 文件示例:excel文件夹.zip

    待读取 Excel 文件,本文示例存放在:FDL工程安装地址\webapps\webroot\WEB-INF\assets\local_files\excel文件夹中。

    待读取 Excel 文件数据如下图所示:

    1699259312328836.png

    2.2 Bat 脚本读取所有 Excel 文件名

    本节通过运行 Bat 脚本,获取所有要读取的 Excel 文件名。

    2.2.1 Bat 脚本内容

    Bat 脚本示例文件:Bat脚本示例.zip

    1)本文示例中,要读取的 Excel 文件保存在FDL工程安装地址\webapps\webroot\WEB-INF\assets\local_files\excel文件夹中,运行该 Bat 脚本后,将在该文件夹中生成一个excel_name.CSV文件,内容为需扫描文件夹内的所有 Excel 的文件名。

    根据实际情况,修改下面代码中的路径。

    注:使用 GBK 编码保存。

    SETLOCAL EnableDelayedExpansion
    REM 启用延迟环境变量扩展

    SET "xls_path=E:\FDL-正式\tomcat-win64\webapps\webroot\WEB-INF\assets\local_files\excel文件夹\*.xls"
    SET "xlsx_path=E:\FDL-正式\tomcat-win64\webapps\webroot\WEB-INF\assets\local_files\excel文件夹\*.xlsx"
    REM xls_path\xlsx_path参数定义了需要扫描文件夹的地址和类型
    SET "output_path=E:\FDL-正式\tomcat-win64\webapps\webroot\WEB-INF\assets\local_files\excel文件夹\excel_name.CSV"
    REM output_path参数定义了输出文件的路径和名称

    DIR "!xls_path!" "!xlsx_path!" /B /ON > "!output_path!"
    REM /B参数是用来输出文件名,/ON参数是用来按文件名排序。

    2)将 Bat 文件放到 Windows 中某个目录下。

    2.2.2 运行 Bat 文件

    1)新建定时任务,拖入「Bat脚本」节点,设置如下图所示:

    3.png

    2)右键点击「Bat脚本」节点,运行该节点,获取所有要读取的 Excel 文件名,便于后续将所有 Excel 名输出为参数。如下图所示:

    4.png

    3)运行成功后,FDL工程安装地址\webapps\webroot\WEB-INF\assets\local_files\excel文件夹中自动生成一个excel_name.CSV文件,内容为需扫描文件夹内的所有 Excel 的文件名。如下图所示:

    6.png

    2.3 将文件名输出为参数

    1)拖入「参数赋值」节点,读取excel_name.CSV文件数据。

    编码选择 GBK ;由于excel_name.CSV文件数据没有字段名称,都是待读取 Excel 文件名,此处不勾选「起始行为字段名」。

    1699257036875418.png

    2)将待读取的 Excel 名称输出为参数。如下图所示:

    1699257234406287.png

    2.4 删除目标表

    为便于后续定时读取 Excel 文件,拖入「SQL脚本」节点,循环读取数据前,先删除目标表;目标表在后续循环容器节点中再新建即可。如下图所示:

    注:本节删除的表与 2.5.2 节「DB表输出」算子中的数据去向表相同。

    1699262261741559.png

    2.5 循环读取 Excel 数据并对数据进行处理

    将 2.3 节的参数传递给循环容器,循环容器可一次次循环来遍历赋值节点的输出结果。

    2.5.1 设置循环容器

    「循环容器」节点设置如下图所示:

    1699257594336783.png

    2.5.2 数据处理

    1)在「循环容器」节点内,拖入数据转换节点,对每次读取的数据进行处理。

    2)进入数据转换节点,拖入文件输入算子,读取文件数据。如下图所示:

    文件地址处引用 2.3 节输出的参数,手动输入;本文示例中,文件地址为:assets/local_files/excel文件夹/${aa}

    注:在「文件地址」中,粘贴完整文件地址或者手动输入文件地址后,按 Enter 键保存。

    1699258269761305.png

    3)根据实际情况,可在「文件输入」算子后接入其他数据处理算子,例如行列转换算子、字段设置算子等,本文示例不展示此过程。

    4)使用DB表输出算子将本次读取的数据输出。如下图所示:

    12.png

    写入方式选择「直接将数据写入目标表」。

    5)点击右上角保存按钮。

    2.6 设置定时调度

    点击任务控制,添加执行频率。如下图所示:

    18.png

    2.7 效果查看

    点击右上角保存并运行按钮即可,运行成功后,wenjian 表数据如下图所示:

    3. 注意事项

    若用户需要循环多次读取 CSV 文件,可适当修改本文 2.2.1 节 Bat 脚本代码:

    SETLOCAL EnableDelayedExpansion
    REM 启用延迟环境变量扩展

    SET "csv_path=E:\FDL-正式\tomcat-win64\webapps\webroot\WEB-INF\assets\local_files\excel文件夹\*.csv"
    REM csv_path 参数定义了需要扫描文件夹的地址和类型
    SET "output_path=E:\FDL-正式\tomcat-win64\webapps\webroot\WEB-INF\assets\local_files\excel_name.CSV"
    REM output_path参数定义了输出文件的路径和名称

    DIR "!csv_path!"  /B /ON > "!output_path!"
    REM /B参数是用来输出文件名,/ON参数是用来按文件名排序。

    需注意,上述代码中,最终输出的 excel_name 文件是 CSV 格式,所以最终输出的文件路径与待扫描的 CSV 文件路径需不同。

    其余步骤根据本文第二章,适当调整即可。





    附件列表


    主题: 数据开发-定时任务
    • 有帮助
    • 没帮助
    • 只是浏览
    • 评价文档,奖励 1 ~ 100 随机 F 豆!

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭



    AI

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持