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

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

打印标题界面

该属性直接保存在SpreadsheetPrintingParts对象中,但是,它似乎尚未完全集成到OpenXML中,并且需要将base64string传递给该variables。 ( 见这里 )这个string的内容似乎与打开文件的计算机绑定,这对我的实现并不起作用 – 我无法通过SpreadsheetPrintingParts.FeedData()创build一个没有损坏的文件。

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

 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是零索引,而不是1索引的Sheet.Id
  2. DefinedNames是每个工作簿一次,但可以包含多个DefinedName对象不同的工作表。