2012-07-08 127 views
3

有谁知道如何设置excel分页符以包含使用C#和OpenXML SDK的一定数量的列?我想要做的是让x列出现在一个页面上。我原本以为设置打印区域会做,但事实并非如此。我找不到任何引用来执行此操作。OpenXML SDK-将excel分页符设置为一定数量的列

这是在Excel电子表格的“分页视图”中手动完成的,您在其中拖动垂直虚线以包含更多列。

由于

+0

我的回答有帮助吗? – Hans 2012-08-20 17:29:03

回答

2

性OpenXML SDK手动水平分页符和手动垂直分页符之间进行区分。

  • 手动水平分页符允许您指定给定行Id(索引)之上的分隔符。
  • 垂直分页符允许您指定指定列Id(索引)左侧的中断。

要以编程方式插入水平分页符,请使用RowBreaksBreak类。 RowBreaks类表示工作表中所有水平分页符的集合。

ColumnBreaksBreak类允许您插入垂直分页符。类保存工作表的所有垂直分页符。

以下示例演示垂直分页符的插入。 函数InsertVerticalPageBreak()需要一个columnIndex(其中应该插入分页符) 和WorksheetPart。此功能首先检查工作表是否已包含 ColumnBreaks集合。如果不是,则会创建一个。然后该函数创建Break类的实例 ,并将Id属性设置为列索引。我还将Max属性 设置为Excel能够处理的最大行数以获得持续的垂直分页符。通过将属性ManualPageBreak设置为true,我们指定了手动分页符。

我还在示例中添加了InsertHorizontalPageBreak()函数,以显示如何为 添加水平分页符。

private void InsertPageBreaks() 
{ 
    uint columnIndex = 17U; 
    uint rowIndex = 51U; 

    using (SpreadsheetDocument sd = SpreadsheetDocument.Open("c:\\temp\\spreadsheet.xlsx", true)) 
    { 
    WorkbookPart workbookPart = sd.WorkbookPart; 
    WorksheetPart worksheetPart = workbookPart.WorksheetParts.Last(); 

    // Uncomment the following line to insert row page breaks. 
    // InsertHorizontalPageBreak(rowIndex, worksheetPart); 
    InsertColumnVerticalBreak(columnIndex, worksheetPart);  
    } 
} 

private void InsertHorizontalPageBreak(uint rowIndex, WorksheetPart worksheetPart) 
{ 
    Break rowBreak = 
     new Break() { Id = (UInt32Value)rowIndex, Max = (UInt32Value)16383U, ManualPageBreak = true }; 

    RowBreaks rb = worksheetPart.Worksheet.GetFirstChild<RowBreaks>(); 

    if (rb == null) 
    { 
    rb = new RowBreaks(); 
    rb.ManualBreakCount = (UInt32Value)0; 
    rb.Count = (UInt32Value)0; 

    worksheetPart.Worksheet.Append(rb); 
    } 

    rb.Append(rowBreak); 
    rb.ManualBreakCount++; 
    rb.Count++; 
} 

private void InsertVerticalPageBreak(uint columnIndex, WorksheetPart worksheetPart) 
{ 
    ColumnBreaks cb = worksheetPart.Worksheet.GetFirstChild<ColumnBreaks>(); 

    if (cb == null) 
    { 
    cb = new ColumnBreaks(); 

    cb.ManualBreakCount = (UInt32Value)0; 
    cb.Count = (UInt32Value)0;  

    worksheetPart.Worksheet.Append(cb); 
    } 

    Break br = 
    new Break() { Id = (UInt32Value)columnIndex, Max = (UInt32Value)1048575U, ManualPageBreak = true }; 

    cb.Append(br); 

    cb.ManualBreakCount++; 
    cb.Count++; 
}