历史版本3 :循环多次读取Windows环境文件同步数据 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 应用场景

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

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

1.2 实现思路

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

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脚本」节点,循环读取数据前,先删除目标表;目标表在后续循环容器节点中再新建即可。如下图所示:

1699262261741559.png

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

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

2.5.1 设置循环容器

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

1699257594336783.png

2.5.2 数据处理

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

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

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

1699258269761305.png

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

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

12.png

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

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

2.6 设置定时调度

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

18.png

2.7 效果查看

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

1699258799948394.png