使用者 Windows 系統中有多個相同格式的 Excel 檔案,需要讀取所有檔案資料並進行 列轉欄 操作。
由於 檔案輸入 算子批量讀取檔案時,是將所有檔案資料上下合併,合併後的資料會存在重複值,列轉欄時會報錯(列轉欄算子中,要求「待列轉欄」的欄位名稱不能重複)。
每次讀取一個 Excel 檔案,並對讀取後的資料進行處理,循環執行該程式,避免一次性讀取所有檔案,導致出現資料重複無法進行列轉欄操作問題。
注:本文方案適用於 4.0.29 及之後版本。
1)由於我們需要透過執行 Bat 腳本獲取待掃描資料夾內的所有 Excel 的檔案名稱,在此之前,需要先配置 SSH 協定資料連結,遠端連結目標伺服器,便於執行遠端伺服器上的 Bat 腳本。
詳情請參見:配置SSH協定資料連結
2)Bat 腳本執行成功後,會在待掃描資料夾內生成一個excel_name.CSV檔案,內容為待掃描資料夾內的所有 Excel 的檔案名稱。
我們需要將檔案名稱匯出為參數,傳入「循環容器」節點,一個個讀取 Excel 檔案資料。匯出為參數前,需要先讀取excel_name.CSV檔案資料。
本文範例中,透過 伺服器本地目錄 資料連結讀取excel_name.CSV檔案資料。
待讀取 Excel 檔案範例:excel文件夹.zip
待讀取 Excel 檔案,本文範例存放在:FDL工程安裝地址\webapps\webroot\WEB-INF\assets\local_files\excel資料夾中。
待讀取 Excel 檔案資料如下圖所示:
本節透過運作 Bat 腳本,獲取所有要讀取的 Excel 檔案名稱。
Bat 腳本範例檔案:Bat脚本示例.zip
1)本文範例中,要讀取的 Excel 檔案儲存在FDL工程安裝地址\webapps\webroot\WEB-INF\assets\local_files\excel資料夾中,運作該 Bat 腳本後,將在該資料夾中生成一個excel_name.CSV檔案,內容為需掃描資料夾內的所有 Excel 的檔案名稱。
根據實際情況,修改下面程式碼中的路徑。
注:使用 GBK 編碼儲存。
SETLOCAL EnableDelayedExpansionREM 啟動延遲環境變數擴展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 中某個目錄下。
1)建立定時任務,拖入「Bat腳本」節點,設定如下圖所示:
2)右鍵點選「Bat腳本」節點,運作該節點,獲取所有要讀取的 Excel 檔案名稱,便於後續將所有 Excel 名匯出為參數。如下圖所示:
3)運作成功後,FDL工程安裝地址\webapps\webroot\WEB-INF\assets\local_files\excel資料夾中自動生成一個excel_name.CSV檔案,內容為需掃描資料夾內的所有 Excel 的檔案名稱。如下圖所示:
1)拖入「參數指派」節點,讀取excel_name.CSV檔案資料。
編碼選擇 GBK ;由於excel_name.CSV檔案資料沒有欄位名稱,都是待讀取 Excel 檔案名稱,此處不勾選「起始行為欄位名」。
2)將待讀取的 Excel 名稱匯出為參數。如下圖所示:
為便於後續定時讀取 Excel 檔案,拖入「SQL腳本」節點,循環讀取資料前,先刪除目標表;目標表在後續「循環容器」節點中再建立即可。如下圖所示:
注:本節刪除的表與 2.5.2 節「DB表匯出」算子中的資料去向表相同。
將 2.3 節的參數傳遞給循環容器,循環容器可一次次循環來遍歷指派節點的匯出結果。
「循環容器」節點設定如下圖所示:
1)在「循環容器」節點內,拖入「資料轉換」節點,對每次讀取的資料進行處理。
2)進入「資料轉換」節點,拖入「檔案輸入」算子,讀取檔案資料。如下圖所示:
「檔案地址」處引用 2.3 節匯出的參數,手動輸入;本文範例中,「檔案地址」為:assets/local_files/excel資料夾/${aa}
注:在「檔案地址」中,貼上完整檔案地址或者手動輸入檔案地址後,按 Enter 鍵儲存。
3)根據實際情況,可在「檔案輸入」算子後接入其他資料處理算子,例如列欄轉換算子、欄位設定算子等,本文範例不展示此程式。
4)使用「DB表匯出」算子將本次讀取的資料匯出。如下圖所示:
寫入方式選擇「直接將資料寫入目標表」。
5)點選右上角「儲存」按鈕。
點選「任務控制」,新增執行頻率。如下圖所示:
點選右上角「儲存並運作」按鈕即可,運作成功後,wenjian 表資料如下圖所示:
若使用者需要循環多次讀取 CSV 檔案,可適當修改本文 2.2.1 節 Bat 腳本程式碼:
SETLOCAL EnableDelayedExpansionREM 啟動延遲環境變數擴展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 檔案路徑需不同。
其餘步驟根據本文第二章,適當調整即可。
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙