Именованные диапазоны в Excel OpenXML - PullRequest
7 голосов
/ 02 сентября 2011

Я пытаюсь создать именованные диапазоны в Excel с OpenXML.Я могу добавить DefinedName в коллекцию DefinedNames, но это, похоже, ничего не делает.Я заметил место в ExtendedFileProperties, где сохраняются имена диапазонов, структуру под названием «TitlesOfParts».Я попытался добавить запись там, но это вызывает Excel, чтобы выдать ошибку, и названный диапазон не создается.Вот код, который я использую:

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

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Используя 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
1 голос
/ 28 сентября 2016

Приведенный ниже код помог мне. После этого я также смог увидеть диапазоны имен в Excel.

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