7

我正在尝试使用 OpenXML 在 Excel 中创建命名范围。我可以在 DefinedNames 集合中添加一个 DefinedName,但这似乎没有任何作用。我注意到在 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++;
    }
4

2 回答 2

2

使用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
于 2012-01-16T22:34:29.067 回答
1

下面的代码对我有用。在此之后,我也能够在 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;
            }
于 2016-09-28T10:05:50.893 回答