在OpenXML中设置定义名称,以设置Excel中所有工作表的打印标题



我的最终目的是在我的文档中所有工作表的页面设置的编程中设置Excel的"打印标题"。

最初,我尝试着使用SpreadsheetPrintingParts对象(基于此问题) - 但是,这需要生成基本64字符串,这似乎必须来自exisising文件。(我从头开始生成电子表格。)

这篇文章然后告诉我,我可以将" print_titles"设置为我需要的行上的定义名称。我一直在编程中尝试执行此操作,但这似乎会损坏我的所有文件。

我的代码:

        var definedNamesCol = new DefinedNames();    //Create the collection
        var definedName = new DefinedName() { Name = "_xlnm.Print_Titles", Text = "'SheetName'!$2:$2", LocalSheetId = (UInt32) (_nextSheetId - 1) };       // Create a new range
        definedNamesCol.Append(definedName);                  // Add it to the collection
        _workbookPart.Workbook.Append(definedNamesCol);

我还使用了OpenXML生产力工具,该工具建议:(本质上是相同的)

        DefinedNames definedNames1 = new DefinedNames();
        DefinedName definedName1 = new DefinedName(){ Name = "_xlnm.Print_Titles", LocalSheetId = (UInt32Value)0U };
        definedName1.Text = "'SheetName'!$2:$2";
        definedNames1.Append(definedName1)

我还尝试过在DefinedName上设置Xlm属性,但是该文件随后打开一个错误,该错误将宏包含在无宏文件中,这不是我想我想做的。

A(简化)我在Workbook.xml中生成的版本:

<?xml version="1.0" encoding="utf-8"?>
<x:workbook xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <x:sheets>
        <x:sheet name="ABBEY" sheetId="1" r:id="R2f5447238bc94fa4" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" />
    </x:sheets>
    <x:definedNames>
        <x:definedName name="_xlnm.Print_Titles" localSheetId="0">'SheetName'!$2:$2</x:definedName>
    </x:definedNames>
</x:workbook>

有更好的方法解决问题吗?还是我的意图是正确的,这是对其他地方的误解?

上面的代码在CreateWorksheet方法内,每个表都被调用。在生成的workbook.xml文件中,然后创建了多个definedNames对象,当只有一个包含多个definedNamesdefinedNames对象。

我使用此代码解决了问题:

        var definedName = new DefinedName() { Name = "_xlnm.Print_Titles", Text = "'Sheet Name'!$2:$2", LocalSheetId = (UInt32) (_nextSheetId - 1) };       // Create a new range
        if (_workbookPart.Workbook.DefinedNames == null)
        {
         var definedNamesCol = new DefinedNames();
        _workbookPart.Workbook.Append(definedNamesCol);
        }
        _workbookPart.Workbook.DefinedNames.Append(definedName);                  // Add it to the collection

最新更新