Excel-Beschränkung bei der Datenüberprüfung für Zeichenketten

This article was translated from English: Does it need improvement?
Translated
View the article in English

Microsoft Excel hat eine bekannte Einschränkung für die Länge von Zeichenfolgenlisten, die besagt, dass die Gesamtlänge der Liste, einschließlich Trennzeichen wie Kommas, maximal 255 Zeichen betragen darf.

Dieses Problem tritt auf, wenn Sie die Liste der Zeichenfolgen manuell im Quellfeld eingeben, anstatt Daten aus einem vorhandenen Bereich im Excel-Blatt zu wählen, wie unten gezeigt.

Problem der Excel-Beschränkung

Lösung für die Excel-Einschränkung in Excel

Der Standard-Workaround für diese Einschränkung besteht darin, eine Liste von Werten in einer Spalte oder Zeile innerhalb des Arbeitsblatts zu erstellen, anstatt die Liste der Zeichenfolgen im Quellfeld einzugeben. Wie unten gezeigt.

Example Solution

Anschließend verwenden Sie einen Formelbezug, zum Beispiel C1:C100, bei der Datenvalidierung und verweisen auf diesen Bereich.

Neue Quelle
Neue Daten

Dieser Ansatz umgeht die Einschränkung und ermöglicht es Ihnen, eine Dropdown-Liste zu erstellen, ohne durch die 255-Zeichen-Grenze eingeschränkt zu sein.


Problem bei IronXL

IronXL verwendet die Methode AddStringListRule, um eine Liste von Zeichenketten zur Datenvalidierung anzuwenden. Aufgrund der oben genannten Zeichengrenze in Excel würde die Speicherungsmethode jedoch weiterhin funktionieren. Es ist jedoch wichtig zu beachten, dass, wenn die Liste 255 Zeichen überschreitet, dies zu einem schwerwiegenden Problem führen könnte: Excel stürzt ab, wenn die Datei geöffnet wird. Hier ist ein Beispiel, das das Problem veranschaulicht.

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

Im Code versuchen wir, eine Liste von Zeichenketten mit dem Namen arrayString als Quelle einer anderen Zeichenkettenliste zu übergeben, um eine Dropdown-Liste zu erstellen. Anschließend versuchen wir, diese Liste unter dem Namen CategoryProductCatalog.xlsx zu speichern. Aufgrund dieser Einschränkungen zeigt Microsoft Excel beim Öffnen der Datei jedoch eine Meldung an, dass die Datei beschädigt ist und nicht geöffnet werden kann.

alt text


Lösung für IronXL

Um dieser Excel-Beschränkung angemessen zu begegnen, stellt IronXL die Methode AddFormulaListRule zur Verfügung, die über die Eigenschaft DataValidations erreichbar ist. Diese Methode ist der Lösung für die Arbeit mit Excel ähnlich.

Zuerst schreiben wir die Liste der Werte in einen Bereich von Zellen im Arbeitsblatt. Verwenden Sie dann AddFormulaListRule, um auf diesen Bereich als Quelle der Dropdown-Liste zu verweisen. Dadurch wird die Einschränkung auf dieselbe Weise umgangen wie bei der Excel-Lösung, jedoch in diesem Fall programmatisch.

Die Verwendung von AddFormulaListRule umgeht nicht nur die Excel-Beschränkung, sondern gewährleistet auch, dass die Datei beim Öffnen in Excel lesbar und stabil bleibt, selbst bei langen Wertelisten.


Codebeispiel

Nachstehend finden Sie das zusätzliche Beispiel, das dieses Problem umgeht. Im gleichen Arbeitsbuch erstellen wir zuerst ein Arbeitsblatt und definieren dann alle Spaltenüberschriften. Wir geben die Liste der Zeichenfolgen aus dem vorherigen Beispiel ein, sowie neue Daten, um die Funktionalität zu veranschaulichen. Anschließend rufen wir AddFormulaListRule mit dem Validierungsbereich von oben auf. Wir speichern es dann schließlich als validationRuleExample.xlsx. Um sicherzustellen, dass unser Arbeitsbuch nicht beschädigt ist und normal verwendet werden kann, öffnen wir es in Excel. Dieser Schritt ist entscheidend, da er die erfolgreiche Implementierung unseres Codes demonstriert.

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

Output Excel-Dateien

Output Validation Example related to Output Excel-Dateien

Wie Sie sehen können, ist die Excel-Datei stabil und verursacht nach der Verwendung von AddFormulaListRule keine Abstürze. Um es selbst auszuprobieren, sehen Sie sich bitte diesen Link für eine Demo der in diesem Artikel verwendeten Anwendung und die Excel-Datei an. Dieses Demo ermöglicht es Ihnen, den Prozess in Aktion zu sehen und zu verstehen, wie Sie ihn in Ihrer Arbeit anwenden können.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen
Bereit anzufangen?
Nuget Downloads 1,913,565 | Version: 2026.3 gerade veröffentlicht
Still Scrolling Icon

Scrollst du immer noch?

Sie brauchen schnell einen Beweis? PM > Install-Package IronXL.Excel
Führen Sie ein Beispiel aus und sehen Sie zu, wie Ihre Daten zu einer Tabellenkalkulation werden.