3

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

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

谢谢

4

1 回答 1

2

OpenXML SDK 区分手动水平分页符和手动垂直分页符。

  • 手动水平分页符允许您在给定行 ID(索引)之上指定一个分页符。
  • 垂直分页符允许您在指定列 ID(索引)的左侧指定一个分页符。

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

ColumnBreaksand类Break允许您插入垂直分页符。该类 ColumnBreaks包含工作表的所有垂直分页符。

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

我还在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++;
}
于 2012-07-08T18:43:58.463 回答