如何使用 OpenXML 设置 Excel“打印标题”

Chr*_*ris 1 c# excel openxml openxml-sdk

如何使用 OpenXML 设置电子表格的“打印标题”属性,以便在每个打印页面的顶部显示一行?

打印标题界面

Chr*_*ris 5

该属性直接保存在SpreadsheetPrintingParts对象中,但是,到目前为止,这似乎还没有完全集成到 OpenXML 中,并且需要将 base64 字符串传递给变量。(请参阅此处)此字符串的内容似乎与打开文件的机器相关联,这对我的实现不起作用 - 我无法通过 SpreadsheetPrintingParts.FeedData().

相反,我发现这篇文章指出给行定义的名称“Print_Titles”具有相同的效果。然后我可以使用以下代码通过 OpenXML 创建一个定义的名称:

public void SetPrintTitleRows(int startRowIndex, int? endRowIndex = null)
        {
            var localSheetId = _localsheetId++;    //LocalSheetIds are 0-indexed.

            var definedName = new DefinedName
            {
                Name = "_xlnm.Print_Titles",
                LocalSheetId = localSheetId,
                Text = String.Format("\'{0}\'!${1}:${2}", _sheetName, startRowIndex, endRowIndex ?? startRowIndex)
            };

            if (_workbookPart.Workbook.DefinedNames == null)
            {
                var definedNamesCol = new DefinedNames();
                _workbookPart.Workbook.Append(definedNamesCol);
            }

            _workbookPart.Workbook.DefinedNames.Append(definedName);
        }
Run Code Online (Sandbox Code Playgroud)

注意事项:

  1. DefinedName.LocalSheetId是零索引的,而不是Sheet.Id1 索引的
  2. DefinedNames每个工作簿一次,但可以包含DefinedName不同工作表的多个对象。