2011-09-02 19 views
6

Excel'de OpenXML ile adlandırılmış aralıklar oluşturmaya çalışıyorum. DefinedNames koleksiyonuna bir DefinedName ekleyebiliyorum, ancak hiçbir şey yapmıyor gibi görünüyor. ExtendedFileProperties'te, aralıkların isimlerinin kaydedildiği, "TitlesOfParts" adlı bir yapının farkına vardım. Orada bir giriş eklemeyi denedim ama bu bir hata atmak için excel neden olur ve adlandırılmış aralık oluşturulmaz.Excel'de Adlandırılmış Adlar 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

"Ben DefinedNames koleksiyonunda bir DefinedName eklemek mümkün, ama bu bir şey yapmak görünmüyor" - yani yapmanız gereken tüm olmalıdır - Hangi yönden bir şey yapmaz? Belgeyi kaydettiğinizde ve Excel'de açtığınızda, adlandırılmış aralığınız açılır listede görünür mü? Xlsx dosyasını zip dosyası olarak açarsanız, adlandırılmış aralığınızı workbook.xml dosyasında bulabilir misiniz? – Ben

+2

Bahse girerim, değerleri uygun şekilde değerlendiremezsiniz. PNamedRangeName öğesinde "myrangename" gibi bir şey görünmeli ve pNamedRangeRef "Sheet1! $ A $ 1" gibi görünmelidir. –

cevap

1

küresel/çalışma kitabı çapında adlandırılmış aralık tanımlamak için, Open XML SDK 2.0 Productivity Tool for Microsoft Office kullanılması oldukça kolaydır: İşte kullanıyorum kodu

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

Aşağıdaki kod benim için hile yaptı. Bundan sonra da excel'de isim alanlarını görebildim.

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