.xlsm 파일을 처리 중이며 openXML 및 C#을 사용하여 데이터 유효성 검사를 위해 다른 시트에서 목록을 사용하는 방법을 알아야합니다.OpenXML을 사용하여 데이터 유효성 검사를 위해 목록을 연결하는 방법
시작하려면 두 개의 빈 시트와 매크로가있는 .xlsm 파일이 있습니다. 내 프로그램에서 파일을 열고 Sheet1에 열 머리글을 만든 다음 sheet2에 유효성 검사 목록을 만듭니다. 그래서, 내 프로그램을 실행 한 후 Sheet1 "A1"은 "Color"텍스트를 포함하고 Sheet2 "A1 : A4"는 "Blue", "Green", "Red", "Yellow"를 포함합니다. 나는 이것을 아주 잘한다.
4 가지 색상이 포함 된 sheet1의 열 "A"의 모든 셀에 드롭 다운 목록이 있으므로 유일한 입력으로 적용하도록하겠습니다. Microsoft Excel에서는 "데이터"탭으로 이동하여 "데이터 유효성 검사"를 선택하여 "목록"을 선택하고 사용할 셀을 강조 표시합니다. 이 연관성을 프로그래밍 방식으로 만들어야합니다.
내가 수동으로 할 경우 Microsoft Excel에서이 작성하는 (희망) XML
은 이것이다 :<extLst>
<ext uri="{CCE6A557-97BC-4b89-ADB6-D9C93CAAB3DF}" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main">
<x14:dataValidations count="1" xmlns:xm="http://schemas.microsoft.com/office/excel/2006/main">
<x14:dataValidation type="list" allowBlank="1" showInputMessage="1" showErrorMessage="1">
<x14:formula1>
<xm:f>'Validation Data'!$A$1:$A$4</xm:f>
</x14:formula1>
<xm:sqref>A1:A1048576</xm:sqref>
</x14:dataValidation>
</x14:dataValidations>
</ext>
</extLst>
다음 방법 및 결과는 내가 노력 무언가이다. 내가하려고하는 것에 대한 더 나은 아이디어를 줄 수 있습니다.
여기서 "sheet2 '! $ A $ 1 : $ A $ 4"를 "validationListCells"매개 변수로 전달합니다. 이 예제에서는 "Red", "Green"... 등의 색상 이름을 포함하는 "Sheet2"의 셀을 나타냅니다.
"cellsToValidate"매개 변수로 "A2 : A1048576"을 전달합니다. 이것은 유효성 검사를 시행하고자하는 Sheet1 열 "A"의 모든 셀을 나타냅니다.
"sheet1"을 worksheetName 매개 변수로 전달합니다.
private void InsertValidation(String worksheetName, String validationListCells, String cellsToValidate)
{
DataValidations dataValidations1 = new DataValidations() { Count = (UInt32Value)1U };
DataValidation dataValidation1 = new DataValidation()
{
Formula1 = new Formula1(validationListCells),
Type = DataValidationValues.List,
ShowInputMessage = true,
ShowErrorMessage = true,
SequenceOfReferences = new ListValue<StringValue>() { InnerText = cellsToValidate }
};
dataValidations1.Append(dataValidation1);
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(_documentPath, true))
{
WorksheetPart worksheetPart = GetWorksheetPartByName(spreadSheet, worksheetName);
worksheetPart.Worksheet.Append(dataValidations1);
worksheetPart.Worksheet.Save();
}
}
결과적으로이 XML은 Sheet1.xml에 있습니다. 어떤 Excel에서 오류가 발생합니다. 이 Excel에서 만든 XML과 유사하기 시작 이후는 바른 길에있을 수 있습니다처럼
<x:dataValidations count="1">
<x:dataValidation type="list" showInputMessage="1" showErrorMessage="1" sqref="A2: A1048576">
<x:formula1>'Sheet2'!$A$1:$A$5</x:formula1>
</x:dataValidation>
</x:dataValidations>
그것은 보이는,하지만 난 OPENXML에 완전히 새로운 그리고 난 그물에이 주제에 대해 조금을 찾는거야.
미리 감사드립니다.
는 여러 XML 파일 또는 하나를 위해이 작업을 수행해야합니까? search와 replace를 사용하여이 작업을 수행해야하는 경우 이미이 작업을 수행하기에 충분할 수 있습니다. – FlyingFoX
글쎄, 한 번에 하나의 스프레드 시트 만 처리합니다. 검색을 사용하고 바꾸는 것이 무슨 뜻인지 확실하지 않습니다. 처음에 이것을 알아 내려고 노력하면서 openXML DataValidation 및 DataValidations 클래스와 수식 클래스를 사용해야하는 것처럼 보였습니다. 편집 된 게시물을 참조하십시오. – user3251089
해결 되었습니까?정확히 같은 문제가 있지만 최종 범위 값에 +1 대신 + 20이 있습니다. 제 경우에는 +20 항목 카탈로그에서만 발생합니다. 짧은 것들은 잘 작동합니다. –