엑셀에서 문자열 데이터 유효성 검사에 대한 제한 사항

Curtis Chau
Curtis Chau
Updated: 2026년 6월 29일

Microsoft Excel에는 문자열 목록의 길이에 대한 알려진 제한 사항이 있는데, 쉼표와 같은 구분 기호를 포함하여 목록의 전체 길이는 255자를 초과할 수 없다는 것입니다.

이 문제는 아래 그림과 같이 Excel 시트의 기존 범위에서 데이터를 선택하는 대신 소스 필드에 문자열 목록을 수동으로 입력할 때 발생합니다.

엑셀 제한 문제

엑셀 제한 사항 해결 방법

이러한 제한 사항에 대한 일반적인 해결 방법은 원본 필드에 문자열 목록을 입력하는 대신 워크시트 내의 열이나 행에 값 목록을 만드는 것입니다. 아래 그림과 같습니다.

Example Solution

그 후, 데이터 유효성 검사에서 C1:C100과 같은 수식 참조를 사용하여 해당 범위를 지정합니다.

새로운 소스
새로운 데이터

이 방법을 사용하면 255자 제한에 구애받지 않고 드롭다운 목록을 만들 수 있으므로 이러한 제약을 우회할 수 있습니다.


IronXL에서 발생하는 문제

IronXL은 데이터 유효성을 위해 문자열 목록을 적용하는 방법으로 AddStringListRule 를 사용합니다. 하지만 위에서 언급한 엑셀의 문자 제한 때문에 저장 방법은 여전히 ​​작동합니다. 하지만 목록의 길이가 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);

코드 내에서 우리는 드롭다운 목록을 만들기 위해 문자열 목록의 소스로 arrayString 라는 문자열 목록을 전달하려고 하고 있습니다. 그런 다음 이를 CategoryProductCatalog.xlsx 로 저장하려고 합니다. 하지만 이러한 제한 사항 때문에 Microsoft Excel로 파일을 열면 파일이 손상되어 열 수 없다는 메시지가 표시됩니다.

대체 텍스트


IronXL 솔루션

이 Excel 제한 사항을 적절히 해결하기 위해 IronXL은 DataValidations 속성에서 사용할 수 있는 방법 AddFormulaListRule 를 제공합니다. 이 방법은 엑셀을 사용하는 해결 방법과 유사합니다.

먼저 워크시트의 셀 범위에 값 목록을 입력합니다. 그런 다음 그 범위를 드롭다운 목록의 소스로 참조하려면 AddFormulaListRule 를 사용하십시오. Excel 솔루션에 사용한 것과 동일한 방법으로 제한 사항을 효과적으로 우회하였지만, 이번에는 프로그래매틱합니다.

Excel 제한 사항을 적절히 우회할 뿐만 아니라 AddFormulaListRule 를 사용하면 값이 긴 목록으로 파일을 열 때 Excel에서 파일이 읽기 쉽고 안정성을 유지하도록 합니다.


코드 예제

다음은 이 문제를 해결하는 추가 예제 코드입니다. 같은 통합 문서를 사용하여 먼저 워크시트를 만든 다음 모든 열 머리글을 정의합니다. 이전 예제의 문자열 목록과 기능 설명을 위한 새로운 데이터를 입력했습니다. 그런 다음 위의 유효성 검증 범위를 사용하여 AddFormulaListRule 을 호출합니다. 그런 다음 마지막으로 이를 validationRuleExample.xlsx 로 저장합니다. 통합 문서가 손상되지 않고 정상적으로 사용할 수 있는지 확인하기 위해 엑셀에서 해당 문서를 엽니다. 이 단계는 우리 코드가 성공적으로 구현되었음을 보여주기 때문에 매우 중요합니다.

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

출력 엑셀 파일

보시다시피, Excel 파일은 안정적이며 AddFormulaListRule 사용 후에도 충돌을 일으키지 않습니다. 직접 사용해 보시려면 이 링크에서 본 문서에 사용된 애플리케이션의 데모와 엑셀 파일을 확인하세요. 이 데모를 통해 실제 작동 방식을 살펴보고 업무에 적용하는 방법을 이해할 수 있습니다.

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

더 읽어보기

시작할 준비 되셨나요?

Nuget Downloads 2,362,812버전:2026.11방금 출시