IRONSOFTWAREHOME

Ograniczenie Excel dotyczące walidacji danych dla ciągów

Curtis Chau
Curtis Chau
Updated: 29 czerwca 2026

Microsoft Excel ma znane ograniczenie dotyczące długości list ciągów, które mówi, że całkowita długość listy, w tym separatory takie jak przecinki, nie może przekraczać 255 znaków.

Ten problem występuje, gdy ręcznie wprowadzisz listę ciągów w polu Źródło, zamiast wybierać dane z istniejącego zakresu w arkuszu Excel, jak pokazano poniżej.

Problem z ograniczeniem Excel

Rozwiązanie dla ograniczenia w Excel

Standardowym obejściem tego ograniczenia jest utworzenie listy wartości w kolumnie lub wierszu w arkuszu, zamiast wpisywania listy ciągów w polu Źródło. Jak pokazano poniżej.

Example Solution

Następnie użyj odwołania do formuły, na przykład C1:C100, w walidacji danych i wskaż na ten zakres.

Nowe źródło
Nowe dane

To podejście omija ograniczenia, umożliwiając utworzenie listy rozwijanej bez ograniczenia do 255 znaków.


Problem w IronXL

IronXL używa metody AddStringListRule, aby zastosować listę ciągów do walidacji danych. Jednakże, z powodu tego samego ograniczenia znaków w Excel, o którym wspomniano powyżej, metoda zapisu nadal będzie działać. Jednakże, ważne jest, aby być świadomym, że jeśli lista przekroczy 255 znaków, może to prowadzić do poważnego problemu: zawieszenia się Excel przy otwieraniu pliku. Oto przykład ilustrujący problem.

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);

W kodzie próbujemy przekazać listę ciągów nazwaną arrayString jako źródło listy ciągów dla stworzenia listy rozwijanej. Następnie próbujemy ją zapisać jako CategoryProductCatalog.xlsx. Jednak, z powodu tych ograniczeń, podczas otwierania pliku w Microsoft Excel, wyświetla się wiadomość, że plik jest uszkodzony i nie można go otworzyć.

tekst alternatywny


Rozwiązanie dla IronXL

Aby właściwie rozwiązać to ograniczenie Excela, IronXL zapewnia metodę AddFormulaListRule, która jest dostępna z właściwości DataValidations. Ta metoda jest podobna do rozwiązania dla pracy z Excel.

Najpierw zapisujemy listę wartości w zakresie komórek na arkuszu. Następnie użyj AddFormulaListRule, aby odwołać się do tego zakresu jako źródła listy rozwijanej. Efektywnie obchodząc ograniczenie za pomocą tych samych metod, jakie zrobiliśmy w rozwiązaniu Excela, ale w tym przypadku jest to programowe.

Korzystanie z AddFormulaListRule właściwie omija ograniczenie Excela, ale również zapewnia, że plik pozostaje zarówno czytelny, jak i stabilny po otwarciu w Excelu, nawet przy długich listach wartości.


Przykład kodu

Poniżej znajduje się dodatkowy kod przykładowy, który omija ten problem. Używając tego samego skoroszytu, najpierw tworzymy arkusz roboczy, a następnie definiujemy wszystkie nagłówki kolumn. Wprowadzamy listę ciągów z poprzedniego przykładu, a także nowe dane, aby zilustrować funkcjonalność. Następnie wywołujemy AddFormulaListRule z zakresem walidacji z powyższego. Następnie w końcu zapisujemy to jako validationRuleExample.xlsx. Aby zapewnić, że nasz skoroszyt nie jest uszkodzony i można go normalnie używać, otwieramy go w Excel. Ten krok jest kluczowy, ponieważ pokazuje udaną implementację naszego kodu.

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.");

Wyjściowe pliki Excel

Jak widać, plik Excela jest stabilny i nie powoduje żadnych awarii po użyciu AddFormulaListRule. Aby przetestować to samodzielnie, zapoznaj się z tym linkiem do dema aplikacji użytej w tym artykułe, wraz z plikiem Excel. To demo pozwoli ci zobaczyć proces w akcji i zrozumieć, jak zastosować go w swojej pracy.

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.

...
Czytaj więcej

Gotowy, aby rozpocząć?

Nuget Downloads 2,237,574Wersja:2026.9właśnie wydany

Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta
Biblioteka C# NuGet dla plików PDF
Zainstaluj za pomocą NuGet

Wersja: 2026.9

PM > Install-Package IronXL.Excel
nuget.org/packages/IronXL.Excel/
  1. W Eksploratorze Rozwiązań, kliknij prawym przyciskiem Myszy na Odwołania, Zarządzaj pakietami NuGet
  2. Wybierz Przeglądaj i wyszukaj "IronXL"
  3. Wybierz pakiet i zainstaluj
DLL PDF dla C#
Pobierz DLL

Wersja: 2026.9

  1. Pobierz i rozpakuj IronXL do lokalizacji, takie jak ~/Libs w katalogu rozwiązania
  2. W Eksploratorze Rozwiązań Visual Studio kliknij prawym przyciskiem Myszy na Odwołania, wybierz Przeglądaj, "IronXL.dll"

Licencje od $999

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta