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 に答える