循環多次讀取Windows環境檔案同步資料

  • 文檔創建者:Wendy123456
  • 編輯次數:8
  • 最近更新:Nikozhan 于 2025-06-27
  • 1. 概述

    1.1 應用場景

    使用者 Windows 系統中有多個相同格式的 Excel 檔案,需要讀取所有檔案資料並進行 列轉欄 操作。

    由於 檔案輸入 算子批量讀取檔案時,是將所有檔案資料上下合併,合併後的資料會存在重複值,列轉欄時會報錯(列轉欄算子中,要求「待列轉欄」的欄位名稱不能重複)。

    1.2 實現思路

    每次讀取一個 Excel 檔案,並對讀取後的資料進行處理,循環執行該程式,避免一次性讀取所有檔案,導致出現資料重複無法進行列轉欄操作問題。

    注:本文方案適用於 4.0.29 及之後版本。

    2. 操作步驟

    2.1 準備工作

    2.1.1 配置資料連結

    1)由於我們需要透過執行 Bat 腳本獲取待掃描資料夾內的所有 Excel 的檔案名稱,在此之前,需要先配置 SSH 協定資料連結,遠端連結目標伺服器,便於執行遠端伺服器上的 Bat 腳本。

    詳情請參見:配置SSH協定資料連結

    2)Bat 腳本執行成功後,會在掃描資料夾內生成一個excel_name.CSV檔案,內容為待掃描資料夾內的所有 Excel 的檔案名稱。

    我們需要將檔案名稱匯出為參數,傳入「循環容器」節點,一個個讀取 Excel 檔案資料。匯出為參數前,需要先讀取excel_name.CSV檔案資料。

    本文範例中,透過 伺服器本地目錄 資料連結讀取excel_name.CSV檔案資料。

    2.1.2 待讀取檔案存放位置

    待讀取 Excel 檔案範例:excel文件夹.zip

    待讀取 Excel 檔案,本文範例存放在:FDL工程安裝地址\webapps\webroot\WEB-INF\assets\local_files\excel資料夾中。

    待讀取 Excel 檔案資料如下圖所示:

    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腳本」節點,設定如下圖所示:

    2)右鍵點選「Bat腳本」節點,運作該節點,獲取所有要讀取的 Excel 檔案名稱,便於後續將所有 Excel 名匯出為參數。如下圖所示:

    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 檔案名稱,此處不勾選「起始行為欄位名」。

    2)將待讀取的 Excel 名稱匯出為參數。如下圖所示:

    2.4 刪除目標表

    為便於後續定時讀取 Excel 檔案,拖入「SQL腳本」節點,循環讀取資料前,先刪除目標表;目標表在後續循環容器節點中再建立即可。如下圖所示:

    注:本節刪除的表與 2.5.2 節「DB表匯出」算子中的資料去向表相同。

    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 豆!