2015-05-14 82 views

回答

2

该场所被直接保存在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不同工作表的对象。