2011-09-02 3 views
6

OpenXML을 사용하여 Excel에서 명명 된 범위를 만들려고합니다. DefinedName 컬렉션에 DefinedName을 추가 할 수는 있지만 아무 것도하지 않는 것 같습니다. RangeFileProperties에서 "TitlesOfParts"라는 구조체의 이름이 저장되는 곳을 발견했습니다. 거기에 항목을 추가하려고했지만 오류가 발생하여 이름이 지정된 범위가 만들어지지 않습니다.Excel의 명명 된 범위 OpenXML

public void AddNamedRange(string pNamedRangeRef, string pNamedRangeName) 
    { 
     DefinedName _definedName = new DefinedName() { Name = pNamedRangeName, Text = pNamedRangeRef }; 
     _workbook.Descendants<DocumentFormat.OpenXml.Spreadsheet.DefinedNames>().First().Append(_definedName); 
     DocumentFormat.OpenXml.VariantTypes.VTLPSTR _t = new DocumentFormat.OpenXml.VariantTypes.VTLPSTR() { Text = pNamedRangeName }; 
     _spreadsheet.ExtendedFilePropertiesPart.Properties.TitlesOfParts.VTVector.Append(_t); 
     _spreadsheet.ExtendedFilePropertiesPart.Properties.TitlesOfParts.VTVector.Size++; 
    } 
+1

"나는 DefinedNames 수집에 DefinedName을 추가 할 수 있어요,하지만 아무것도하지 않는 것"- 그것이 당신이 할 일은해야한다 - 어떤 식으로는 아무것도하지 않는 이유는 무엇입니까? 문서를 저장하고 Excel에서 열면 이름이 지정된 범위가 드롭 다운 목록에 나타 납니까? xlsx를 zip 파일로 열면 workbook.xml에서 이름이 지정된 범위를 찾을 수 있습니까? – Ben

+2

나는 당신이 값들을 적절하게 한정하지 못할 것이라고 생각한다. pNamedRangeName은 "myrangename"과 같아야하고 pNamedRangeRef는 "Sheet1! $ A $ 1"처럼 보입니다. –

답변

1

글로벌/통합 문서 전체 명명 된 범위를 정의하려면 Open XML SDK 2.0 Productivity Tool for Microsoft Office를 사용하여 아주 쉽게됩니다 : 여기에 내가 사용하고있는 코드는

DefinedNames definedNamesCol = new DefinedNames(); //Create the collection 
DefinedName definedName = new DefinedName() 
    { Name = "test", Text="Sheet1!$B$2:$B$4" };  // Create a new range 
definedNamesCol.Append(definedName);     // Add it to the collection 

workbook.Append(definedNamesCol);      // Add collection to the workbook 
0

아래의 코드는 나를 위해 트릭을했다. 이것 후에 나는 또한 이름 범위를 탁월하게 볼 수있었습니다.

var wbPart = document.WorkbookPart; 
Workbook workbook = wbPart.Workbook; 
DefinedName definedName1 = new DefinedName { Name = "ColumnRange",Text = "Sheet1!$A$1:$I$1"}; 
DefinedName definedName2 = new DefinedName { Name = "RowRange", Text = "Sheet1!$A$1:$A$15"}; 
if (workbook.DefinedNames == null) 
      { 
       DefinedNames definedNames1 = new DefinedNames(); 
       definedNames1.Append(definedName1); 
       definedNames1.Append(definedName2); 
       workbook.DefinedNames = definedNames1; 
      }