【问题标题】:How to set Excel "Print Titles" with OpenXML如何使用 OpenXML 设置 Excel“打印标题”
【发布时间】:2015-05-14 13:02:03
【问题描述】:

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

【问题讨论】:

    标签: c# excel openxml openxml-sdk


    【解决方案1】:

    该属性直接保存在SpreadsheetPrintingParts 对象中,但是,这似乎还没有完全集成到OpenXML 中,并且需要将base64 字符串传递给变量。 (see here) 这个字符串的内容似乎与打开文件的机器相关联,这对我的实现不起作用——我无法通过SpreadsheetPrintingParts.FeedData() 创建一个未损坏的文件。

    相反,我发现this post 声明为行赋予定义的名称“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);
            }
    

    注意事项:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多