沒問題,**「逐行驗證(Row-by-Row)」**是處理資料上傳最靈活的策略。 這種做法的好處是:解耦。 驗證邏輯只專注於「這一行對不對」,而不用管整張表怎麼跑。這讓你可以在迴圈中隨時決定要「蒐集所有錯誤」還是「遇到錯誤立刻停止」。 以下是調整後的架構,專注於單行處理: 1. 定義單行驗證結果 (The Row Result) 我們需要一個輕量的物件,回傳「這一行」到底有沒有問題。 Public Class RowValidationResult Public Property IsValid As Boolean = True Public Property RowIndex As Integer Public Property Errors As New List(Of String)() ' 這一行裡面的具體錯誤訊息 Public Sub New(index As Integer) Me.RowIndex = index End Sub Public Sub AddError(msg As String) Me.IsValid = False Me.Errors.Add(msg) End Sub End Class 2. 核心:單行驗證器 (The Row Validator) 這個 Class 就像一個檢驗員,一次只看一份文件(一行資料)。 Public Class ExcelRowValidator ' 核心方法:只收一個 DataRow 和它的行號 Public Function ValidateRow(row As DataRow, rowIndex As Integer) As RowValidationResult Dim result As New RowValidationResult(rowIndex) ' --- 規則 A: 必填檢查 (例如: 身分證號) --- If IsDBNull(row("ID_Card")) OrElse String.IsNullOrWhiteSpace(row("ID_Card").ToString()) Then result.AddError("【身分證號】不能為空") End If ' --- 規則 B: 格式檢查 (例如: 手機號碼必須是數字且長度正確) --- Dim phone = row("Phone").ToString() If Not String.IsNullOrWhiteSpace(phone) Then If Not IsNumeric(phone) OrElse phone.Length <> 10 Then result.AddError("【手機號碼】格式錯誤,需為10碼數字") End If End If ' --- 規則 C: 業務邏輯 (例如: 到職日不能晚於離職日) --- ' 這裡假設欄位都存在,實務上建議先用 TryParse 轉型 Dim startDateStr = row("StartDate").ToString() Dim endDateStr = row("EndDate").ToString() If IsDate(startDateStr) AndAlso IsDate(endDateStr) Then If CDate(startDateStr) > CDate(endDateStr) Then result.AddError("【日期邏輯】到職日不能晚於離職日") End If End If Return result End Function End Class 3. 在主程式中呼叫 (The Execution Loop) 這裡展現了逐行驗證的威力:你可以完全控制流程。 Public Sub ProcessExcelUpload(dt As DataTable) Dim validator As New ExcelRowValidator() Dim allErrors As New List(Of String)() ' 蒐集所有錯誤報告 Dim validRows As New List(Of DataRow)() ' 蒐集正確的資料準備存檔 ' 逐行掃描 For i As Integer = 0 To dt.Rows.Count - 1 Dim currentRow As DataRow = dt.Rows(i) Dim excelRowIndex As Integer = i + 2 ' Excel顯示的行號 ' 呼叫單行驗證 Dim rowResult As RowValidationResult = validator.ValidateRow(currentRow, excelRowIndex) If rowResult.IsValid Then ' 如果該行正確,加入待處理清單 validRows.Add(currentRow) Else ' 如果該行有錯,格式化錯誤訊息並記錄 Dim errorMsg As String = $"第 {rowResult.RowIndex} 列錯誤: {String.Join(", ", rowResult.Errors)}" allErrors.Add(errorMsg) ' 選項:如果你想要「遇到錯誤就立刻中止」,這裡可以直接 Return 或 Exit For ' Return End If Next ' --- 處理結果 --- If allErrors.Count > 0 Then ' 有錯誤:回傳給前端顯示,不進行存檔 Console.WriteLine("上傳失敗,請修正以下問題:") For Each err In allErrors Console.WriteLine(err) Next Else ' 全數通過:執行資料庫寫入 SaveDataToDB(validRows) Console.WriteLine("成功!共匯入 " & validRows.Count & " 筆資料。") End If End Sub 狠準洞察 (Critical Insights) * 錯誤訊息的「聚合」技巧: 在 RowValidationResult 裡,我用了 List(Of String) 而不是單一字串。為什麼?因為同一行資料可能同時犯了兩個錯(例如:身分證空的 + 手機格式錯)。一次告訴使用者該行所有問題,比讓他上傳兩次才發現還有錯,體驗好太多了。 * 擴充性 (Scalability): 這種寫法未來非常好維護。如果有新的驗證規則(例如新增「檢查 Email」),你只需要去 ExcelRowValidator 裡面加一段 If 判斷即可,完全不會影響到外面的迴圈結構。 * 資料淨化: 在 ValidateRow 裡面,除了驗證,其實也是做「資料清洗」的好時機。例如把全形數字轉半形、去除前後空白(Trim),確保進入 validRows 的資料都是乾淨的。 接下來你可以讓我做的是: 需要我幫你寫一段 Code,專門用來處理 ValidateRow 裡面的「安全轉型」嗎?(例如:不管Excel格子裡是文字還是數字,都能安全轉成 Integer 或 Date 而不報錯)。
留言
Pocheng Chiu的沙龍
0會員
24內容數
Pocheng Chiu的沙龍的其他內容
2025/11/05
這是一個很棒的個人化功能。要實現「根據工號保存設定」,我們需要將架構從「純前端 (JavaScript)」擴展為「前端 + 後端 (資料庫)」。
核心思路是:
* 後端 (資料庫): 建立一個資料表,用來儲存 EmployeeID 和他勾選的欄位字串 (例如:"col-pdid,col-weigh
2025/11/05
這是一個很棒的個人化功能。要實現「根據工號保存設定」,我們需要將架構從「純前端 (JavaScript)」擴展為「前端 + 後端 (資料庫)」。
核心思路是:
* 後端 (資料庫): 建立一個資料表,用來儲存 EmployeeID 和他勾選的欄位字串 (例如:"col-pdid,col-weigh
2025/11/04
了解。您不希望勾選項全部擠在同一行 (inline),而是希望它們像表格一樣,整齊地排列成網格 (Grid)。
在舊版 Bootstrap (3/4) 中,最好的做法是使用它內建的網格系統 (Grid System) (.row 和 .col-*) 來取代 .checkbox-inline。
我
2025/11/04
了解。您不希望勾選項全部擠在同一行 (inline),而是希望它們像表格一樣,整齊地排列成網格 (Grid)。
在舊版 Bootstrap (3/4) 中,最好的做法是使用它內建的網格系統 (Grid System) (.row 和 .col-*) 來取代 .checkbox-inline。
我
2025/11/04
了解,這是將您提供的 12 個欄位套用到先前 Bootstrap 3/4 範本的 Index.vbhtml 程式碼。
核心的 JavaScript/jQuery 邏輯完全不需要變更,您只需要更新 View 中的 HTML 勾選區和表格欄位。
1. 欄位勾選區 (更新)
請將 Views/Home/I
2025/11/04
了解,這是將您提供的 12 個欄位套用到先前 Bootstrap 3/4 範本的 Index.vbhtml 程式碼。
核心的 JavaScript/jQuery 邏輯完全不需要變更,您只需要更新 View 中的 HTML 勾選區和表格欄位。
1. 欄位勾選區 (更新)
請將 Views/Home/I
你可能也想看
























凱北上週五20221118鎖華經、凱北2檔
華經今日開盤力道正,
開盤價31.2,
2分鐘內很快衝到31.8,
漲幅還不到5%,
勇敢當沖多,
要追只能追在31.8左右。
一下子來到32.8,
但是急殺,
當沖多必須快速停利,
否則要吃下跌。
盤中最低跌到29.25,
殺很大。
尾盤最後一盤突然漲到

凱北上週五20221118鎖華經、凱北2檔
華經今日開盤力道正,
開盤價31.2,
2分鐘內很快衝到31.8,
漲幅還不到5%,
勇敢當沖多,
要追只能追在31.8左右。
一下子來到32.8,
但是急殺,
當沖多必須快速停利,
否則要吃下跌。
盤中最低跌到29.25,
殺很大。
尾盤最後一盤突然漲到

全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?

全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?

長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。

長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。

本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。

本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。

20251121 祂們說要對付你
我住在台北大同區,很長一段時間了。
有一段時間,這附近舉辦連續幾天盛大的宗教活動,我抽出時間,特地到現場去觀看。
有儀隊、有鼓隊、有旗隊、還有諸多陣頭,熱鬧非常。
我從龍邊進去廟裡,依序向壇城主尊、各殿,一一頂禮,然後就離去。
這件事

20251121 祂們說要對付你
我住在台北大同區,很長一段時間了。
有一段時間,這附近舉辦連續幾天盛大的宗教活動,我抽出時間,特地到現場去觀看。
有儀隊、有鼓隊、有旗隊、還有諸多陣頭,熱鬧非常。
我從龍邊進去廟裡,依序向壇城主尊、各殿,一一頂禮,然後就離去。
這件事

你我皆凡人,生在人世間,道義放兩旁,利字擺中間
一、輝達消息最近如雷貫耳,但是財報好或是不好,要市場投票決定好還是不好
二、鈊象的答案還是一樣:「神仙打架,凡人迴避」,維持壁上觀就好
輝達「循環交易」有其風險,但是最大的風險,應該還是「過度投資」造成的,可能是想贏過對方,也可能是不想輸給對方

你我皆凡人,生在人世間,道義放兩旁,利字擺中間
一、輝達消息最近如雷貫耳,但是財報好或是不好,要市場投票決定好還是不好
二、鈊象的答案還是一樣:「神仙打架,凡人迴避」,維持壁上觀就好
輝達「循環交易」有其風險,但是最大的風險,應該還是「過度投資」造成的,可能是想贏過對方,也可能是不想輸給對方

策略一: 長期斜率 (2)
5289 宜鼎–X,沒有蛻變
1590 亞德客-KY–X,沒有蛻變
策略二: 短期斜率 (1)
1736 喬山–X,線下盤整只有一年,不夠久,不選

策略一: 長期斜率 (2)
5289 宜鼎–X,沒有蛻變
1590 亞德客-KY–X,沒有蛻變
策略二: 短期斜率 (1)
1736 喬山–X,線下盤整只有一年,不夠久,不選

日本大分市火災 燒毀170棟建築
Larry Summers因為Epstein醜聞辭去OpenAI董事
美國不參加南非G20
法官裁定終止華盛頓國民兵部署
法官下令德州公立學校移除「十誡」海報
印尼Semeru火山爆發

日本大分市火災 燒毀170棟建築
Larry Summers因為Epstein醜聞辭去OpenAI董事
美國不參加南非G20
法官裁定終止華盛頓國民兵部署
法官下令德州公立學校移除「十誡」海報
印尼Semeru火山爆發

從開盤暴漲直接變成暴跌,這是最最最差走法,Nvidia財報利多出盡確立
不管美股今天收盤怎麼收,今天這走勢絕對不是止跌的走法,我在剛剛已停損出清5口大台多單,並反手做空,明天台股開盤後也會繼續大量出清個股,再繼續加碼台指期空單

從開盤暴漲直接變成暴跌,這是最最最差走法,Nvidia財報利多出盡確立
不管美股今天收盤怎麼收,今天這走勢絕對不是止跌的走法,我在剛剛已停損出清5口大台多單,並反手做空,明天台股開盤後也會繼續大量出清個股,再繼續加碼台指期空單

這是我的cmoney連結,歡迎追蹤按讚:
https://fourm.page.link/U5ew
凱北上週五20221118鎖倫飛
倫飛在11/09~11/11已經玩過,
當時凱北賺近2根漲停,
獲利1740萬出場,
強!
詳見當時的發文。
11/18又鎖倫飛,
11/21開盤力道負97,
開盤當

這是我的cmoney連結,歡迎追蹤按讚:
https://fourm.page.link/U5ew
凱北上週五20221118鎖倫飛
倫飛在11/09~11/11已經玩過,
當時凱北賺近2根漲停,
獲利1740萬出場,
強!
詳見當時的發文。
11/18又鎖倫飛,
11/21開盤力道負97,
開盤當

因為山就在那裡~登山家喬治。馬洛里
「我們往往要走到別無選擇的境地,才肯放棄」~安慰不如果斷行為,因得到安慰的是靈魂,而不是生命本身
「登頂不是互相比試,是每個人和山的對決,但遺言總是屬於山的」~面對自己的「聖母峰」,有人選擇退縮,有人堅持到底,但最終謙遜與智慧才是生存之道
上山、下山、都是愛

因為山就在那裡~登山家喬治。馬洛里
「我們往往要走到別無選擇的境地,才肯放棄」~安慰不如果斷行為,因得到安慰的是靈魂,而不是生命本身
「登頂不是互相比試,是每個人和山的對決,但遺言總是屬於山的」~面對自己的「聖母峰」,有人選擇退縮,有人堅持到底,但最終謙遜與智慧才是生存之道
上山、下山、都是愛

若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。

若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。






