IronXL 故障排除 Excel限制:字符串列表的數據驗證 Excel在字串資料驗證方面的局限性 Curtis Chau 更新:2025年8月19日 下載 IronXL NuGet 下載 DLL 下載 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 This article was translated from English: Does it need improvement? Translated View the article in English Microsoft Excel 對字串清單的長度有一個已知的限制,即清單的總長度(包括逗號等分隔符號)不能超過 255 個字元。 當您在來源欄位中手動輸入字串列表,而不是從 Excel 表格中的現有範圍中選擇資料時,就會出現此問題,如下所示。 Excel 限制問題 解決 Excel 限制問題 針對此限制的標準解決方法是在工作表的列或行中建立值列表,而不是在來源欄位中輸入字串列表。 如下圖所示。 Excel 限制解決方案範例 之後,在資料驗證中使用公式引用,例如 C1:C100,並指向該範圍。 這種方法可以繞過限制,讓你建立下拉清單而不受 255 個字元的限制。 IronXL出現問題 IronXL使用方法 AddStringListRule 來套用字串清單進行資料驗證。 但是,由於上述 Excel 中的字元限制,保存方法仍然有效。 但是,需要注意的是,如果清單超過 255 個字符,則可能會導致嚴重問題:開啟檔案時 Excel 崩潰。 下面舉個例子來說明這個問題。 using IronXL; using IronXl.DataValidations; // Set your license key here if you have one IronXl.License.LicenseKey = "YOUR-LICENSE-KEY"; var workBook = WorkBook.Create(ExcelFileFormat.XLSX); var sheet = workBook.CreateWorkSheet("Validation Rule Example using"); // Apply rules from row 2 down to row 500 var validationRangeStart = "2"; var validationRangeFinish = "500"; // --- 1. Define All Column Headers --- sheet["A1"].Value = "String List Test"; sheet["B1"].Value = "Formula List Test"; sheet["A1:B1"].Style.Font.Bold = true; // 256 string[] arrayString = new string[] { "SKU-A01-R", "SKU-A02-R", "SKU-A03-R", "SKU-A04-R", "SKU-A05-R", "SKU-B01-G", "SKU-B02-G", "SKU-B03-G", "SKU-B04-G", "SKU-B05-G", "SKU-C01-B", "SKU-C02-B", "SKU-C03-B", "SKU-C04-B", "SKU-C05-B", "SKU-D01-Y", "SKU-D02-Y", "SKU-D03-Y", "SKU-D04-Y", "SKU-D05-Y", "END-001", "END-002", "END-003", "END-004", "END-005", "END-010", "END-001" }; // total char with seperator 257 (230 char + 26 sperator [,] ) // no problem when write to a file var skuValidation = sheet.DataValidations.AddStringListRule(sheet[$"A{validationRangeStart}:A{validationRangeFinish}"].RangeAddress, arrayString); // set error box skuValidation.ShowErrorBox = true; skuValidation.ErrorBoxTitle = "Invalid SKU"; skuValidation.ErrorBoxText = "Please select a SKU from the list."; skuValidation.ErrorAlert = ErrorAlert.Stop; //attempt to save the file var fileName = "CategoryProductCatalog.xlsx"; workBook.SaveAs(fileName); using IronXL; using IronXl.DataValidations; // Set your license key here if you have one IronXl.License.LicenseKey = "YOUR-LICENSE-KEY"; var workBook = WorkBook.Create(ExcelFileFormat.XLSX); var sheet = workBook.CreateWorkSheet("Validation Rule Example using"); // Apply rules from row 2 down to row 500 var validationRangeStart = "2"; var validationRangeFinish = "500"; // --- 1. Define All Column Headers --- sheet["A1"].Value = "String List Test"; sheet["B1"].Value = "Formula List Test"; sheet["A1:B1"].Style.Font.Bold = true; // 256 string[] arrayString = new string[] { "SKU-A01-R", "SKU-A02-R", "SKU-A03-R", "SKU-A04-R", "SKU-A05-R", "SKU-B01-G", "SKU-B02-G", "SKU-B03-G", "SKU-B04-G", "SKU-B05-G", "SKU-C01-B", "SKU-C02-B", "SKU-C03-B", "SKU-C04-B", "SKU-C05-B", "SKU-D01-Y", "SKU-D02-Y", "SKU-D03-Y", "SKU-D04-Y", "SKU-D05-Y", "END-001", "END-002", "END-003", "END-004", "END-005", "END-010", "END-001" }; // total char with seperator 257 (230 char + 26 sperator [,] ) // no problem when write to a file var skuValidation = sheet.DataValidations.AddStringListRule(sheet[$"A{validationRangeStart}:A{validationRangeFinish}"].RangeAddress, arrayString); // set error box skuValidation.ShowErrorBox = true; skuValidation.ErrorBoxTitle = "Invalid SKU"; skuValidation.ErrorBoxText = "Please select a SKU from the list."; skuValidation.ErrorAlert = ErrorAlert.Stop; //attempt to save the file var fileName = "CategoryProductCatalog.xlsx"; workBook.SaveAs(fileName); $vbLabelText $csharpLabel 在程式碼中,我們嘗試將名為 arrayString 的字串清單作為字串清單的來源,以建立下拉式清單。然後,我們嘗試將其儲存為 CategoryProductCatalog.xlsx。 但是,由於這些限制,當使用 Microsoft Excel 開啟該檔案時,會顯示一則訊息,指出該檔案已損壞,無法開啟。 IronXL的解決方案 為了妥善解決 Excel 的這個限制, IronXL提供了 AddFormulaListRule 方法,該方法可透過 DataValidations 屬性取得。 這種方法與使用 Excel 的解決方案類似。 我們首先將數值清單寫入工作表上的一系列儲存格。 然後使用 AddFormulaListRule 將該範圍引用為下拉清單的資料來源。這有效地繞過了限制,方法與我們對 Excel 解決方案所做的相同,但這次是透過程式設計實現的。 使用 AddFormulaListRule 可以正確規避 Excel 的限制,同時也確保檔案在 Excel 中開啟時保持可讀性和穩定性,即使包含很長的值清單。 程式碼範例 以下是規避此問題的其他範例程式碼。 在同一個工作簿中,我們首先建立一個工作表,然後定義所有列標題。 我們輸入上一個範例中的字串列表,以及新的資料來示範該功能。 然後我們呼叫 AddFormulaListRule,並使用上面的驗證範圍。 最後我們將其儲存為 validationRuleExample.xlsx。 為了確保工作簿沒有損壞且可以正常使用,我們在 Excel 中開啟它。 這一步驟至關重要,因為它證明了我們的程式碼已成功實現。 using IronXL; using IronXl.DataValidations; using System; // Set your license key here if you have one IronXl.License.LicenseKey = "YOUR-LICENSE-KEY"; var workBook = WorkBook.Create(ExcelFileFormat.XLSX); var sheet = workBook.CreateWorkSheet("Validation Rule Example using"); // Apply rules from row 2 down to row 500 var validationRangeStart = "2"; var validationRangeFinish = "500"; // --- 1. Define All Column Headers --- sheet["A1"].Value = "String List Test"; sheet["B1"].Value = "Formula List Test"; sheet["A1:B1"].Style.Font.Bold = true; string[] arrayString2 = new string[] { "SKU-A01-R", "SKU-A02-R", "SKU-A03-R", "SKU-A04-R", "SKU-A05-R", "SKU-B01-G", "SKU-B02-G", "SKU-B03-G", "SKU-B04-G", "SKU-B05-G", "SKU-C01-B", "SKU-C02-B", "SKU-C03-B", "SKU-C04-B", "SKU-C05-B", "SKU-D01-Y", "SKU-D02-Y", "SKU-D03-Y", "SKU-D04-Y", "SKU-D05-Y", "END-001", "END-002", "END-003", "END-004", "END-005", "END-010", "END-001", "IRON01","IRON02","IRON03","IRON04","IRON05","IRON06","IRON07","IRON08","IRON09","IRON10", "IRON11","IRON12","IRON13","IRON14","IRON15","IRON16","IRON17","IRON18","IRON19","IRON20", "IRON21","IRON22","IRON23","IRON24","IRON25","IRON26","IRON27","IRON28","IRON29","IRON30", "IRON31","IRON32","IRON33","IRON34","IRON35","IRON36","IRON37","IRON38","IRON39","IRON40", "IRON41","IRON42","IRON43","IRON44","IRON45","IRON46","IRON47","IRON48","IRON49","IRON50", "IRON51","IRON52","IRON53","IRON54","IRON55","IRON56","IRON57","IRON58","IRON59","IRON60", "IRON61","IRON62","IRON63","IRON64","IRON65","IRON66","IRON67","IRON68","IRON69","IRON70", "IRON71","IRON72","IRON73","IRON74","IRON75","IRON76","IRON77","IRON78","IRON79","IRON80", "IRON81","IRON82","IRON83","IRON84","IRON85","IRON86","IRON87","IRON88","IRON89","IRON90", "IRON91","IRON92","IRON93","IRON94","IRON95","IRON96","IRON97","IRON98","IRON99","IRON100" }; // total char with seperator 257 (230 char + 26 sperator [,] ) //Write the contents of your array to column A of the data sheet. for (int i = 0; i < arrayString2.Length; i++) { // Note: IronXL row and cell indices are 1-based. sheet[$"A{i + 1}"].Value = arrayString2[i]; } // Create the formula string that points to our data range. // This will look like: 'ValidationData'!$A$1:$A$100 string formula = $"'{sheet.Name}'!$A$1:$A${arrayString2.Length}"; Console.WriteLine($"Generated formula for validation: {formula}"); var sku2Validation = sheet.DataValidations.AddFormulaListRule(sheet[$"B{validationRangeStart}:B{validationRangeFinish}"], formula); sku2Validation.ShowErrorBox = true; sku2Validation.ErrorBoxTitle = "Invalid SKU2"; sku2Validation.ErrorBoxText = "Please select a SKU from the list."; sku2Validation.ErrorAlert = ErrorAlert.Stop; // --- Final Touches --- sheet.AutoSizeColumn(0, true); sheet.AutoSizeColumn(1, true); var fileName = "validationRuleExample.xlsx"; workBook.SaveAs(fileName); Console.WriteLine($"Successfully created '{fileName}' with 2 validation rules example."); using IronXL; using IronXl.DataValidations; using System; // Set your license key here if you have one IronXl.License.LicenseKey = "YOUR-LICENSE-KEY"; var workBook = WorkBook.Create(ExcelFileFormat.XLSX); var sheet = workBook.CreateWorkSheet("Validation Rule Example using"); // Apply rules from row 2 down to row 500 var validationRangeStart = "2"; var validationRangeFinish = "500"; // --- 1. Define All Column Headers --- sheet["A1"].Value = "String List Test"; sheet["B1"].Value = "Formula List Test"; sheet["A1:B1"].Style.Font.Bold = true; string[] arrayString2 = new string[] { "SKU-A01-R", "SKU-A02-R", "SKU-A03-R", "SKU-A04-R", "SKU-A05-R", "SKU-B01-G", "SKU-B02-G", "SKU-B03-G", "SKU-B04-G", "SKU-B05-G", "SKU-C01-B", "SKU-C02-B", "SKU-C03-B", "SKU-C04-B", "SKU-C05-B", "SKU-D01-Y", "SKU-D02-Y", "SKU-D03-Y", "SKU-D04-Y", "SKU-D05-Y", "END-001", "END-002", "END-003", "END-004", "END-005", "END-010", "END-001", "IRON01","IRON02","IRON03","IRON04","IRON05","IRON06","IRON07","IRON08","IRON09","IRON10", "IRON11","IRON12","IRON13","IRON14","IRON15","IRON16","IRON17","IRON18","IRON19","IRON20", "IRON21","IRON22","IRON23","IRON24","IRON25","IRON26","IRON27","IRON28","IRON29","IRON30", "IRON31","IRON32","IRON33","IRON34","IRON35","IRON36","IRON37","IRON38","IRON39","IRON40", "IRON41","IRON42","IRON43","IRON44","IRON45","IRON46","IRON47","IRON48","IRON49","IRON50", "IRON51","IRON52","IRON53","IRON54","IRON55","IRON56","IRON57","IRON58","IRON59","IRON60", "IRON61","IRON62","IRON63","IRON64","IRON65","IRON66","IRON67","IRON68","IRON69","IRON70", "IRON71","IRON72","IRON73","IRON74","IRON75","IRON76","IRON77","IRON78","IRON79","IRON80", "IRON81","IRON82","IRON83","IRON84","IRON85","IRON86","IRON87","IRON88","IRON89","IRON90", "IRON91","IRON92","IRON93","IRON94","IRON95","IRON96","IRON97","IRON98","IRON99","IRON100" }; // total char with seperator 257 (230 char + 26 sperator [,] ) //Write the contents of your array to column A of the data sheet. for (int i = 0; i < arrayString2.Length; i++) { // Note: IronXL row and cell indices are 1-based. sheet[$"A{i + 1}"].Value = arrayString2[i]; } // Create the formula string that points to our data range. // This will look like: 'ValidationData'!$A$1:$A$100 string formula = $"'{sheet.Name}'!$A$1:$A${arrayString2.Length}"; Console.WriteLine($"Generated formula for validation: {formula}"); var sku2Validation = sheet.DataValidations.AddFormulaListRule(sheet[$"B{validationRangeStart}:B{validationRangeFinish}"], formula); sku2Validation.ShowErrorBox = true; sku2Validation.ErrorBoxTitle = "Invalid SKU2"; sku2Validation.ErrorBoxText = "Please select a SKU from the list."; sku2Validation.ErrorAlert = ErrorAlert.Stop; // --- Final Touches --- sheet.AutoSizeColumn(0, true); sheet.AutoSizeColumn(1, true); var fileName = "validationRuleExample.xlsx"; workBook.SaveAs(fileName); Console.WriteLine($"Successfully created '{fileName}' with 2 validation rules example."); $vbLabelText $csharpLabel 輸出 Excel 文件 如您所見,Excel 檔案穩定,在使用 AddFormulaListRule 後不會發生任何當機。 要親自體驗,請點擊此連結查看本文中使用的應用程式演示以及 Excel 文件。此演示將幫助您了解流程的實際運作情況,並了解如何將其應用到您的工作中。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 準備好開始了嗎? Nuget 下載 1,913,565 | 版本: 2026.3 剛剛發布 開始免費試用 免費 NuGet 下載 總下載量:1,913,565 查看許可證 還在捲動嗎? 想要快速證明? PM > Install-Package IronXL.Excel 執行範例 觀看您的資料變成試算表。 免費 NuGet 下載 總下載量:1,913,565 查看許可證