C# OpenXMLSDK-将excel分页符设置为一定数量的列

C# OpenXMLSDK-将excel分页符设置为一定数量的列,c#,excel-2007,openxml-sdk,C#,Excel 2007,Openxml Sdk,有人知道如何使用C#和OpenXMLSDK将excel分页符设置为包含一定数量的列吗?我要做的是使x列显示在一个页面上。我原本以为设置打印区域就可以了,但事实并非如此。我找不到做这件事的任何参考资料 这是在excel电子表格的“分页符视图”中手动完成的,在该视图中拖动垂直虚线以包含更多列 谢谢OpenXMLSDK区分了手动水平分页符和手动垂直分页符 手动水平分页符允许您在给定行Id(索引)上方指定分页符 垂直分页符允许您在指定列Id(索引)的左侧指定分页符 要以编程方式插入水平分页符,请使用

有人知道如何使用C#和OpenXMLSDK将excel分页符设置为包含一定数量的列吗?我要做的是使x列显示在一个页面上。我原本以为设置打印区域就可以了,但事实并非如此。我找不到做这件事的任何参考资料

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


谢谢

OpenXMLSDK区分了手动水平分页符和手动垂直分页符

  • 手动水平分页符允许您在给定行Id(索引)上方指定分页符
  • 垂直分页符允许您在指定列Id(索引)的左侧指定分页符
要以编程方式插入水平分页符,请使用
RowBreaks
break
类。
RowBreaks
类表示工作表中所有水平分页符的集合

分页符
分页符
类允许插入垂直分页符。这个
分栏符
类保存工作表的所有垂直分页符

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

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++;
}
我还向示例中添加了一个
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++;
}
private void InsertPageBreaks()
{
uint柱状指数=17U;
uint rowIndex=51U;
使用(SpreadsheetDocument sd=SpreadsheetDocument.Open(“c:\\temp\\spreadsheet.xlsx”,true))
{
WorkbookPart WorkbookPart=sd.WorkbookPart;
WorksheetPart WorksheetPart=workbookPart.WorksheetParts.Last();
//取消对以下行的注释以插入行分页符。
//插入横向分页符(行索引,工作表部分);
InsertColumnVerticalBreak(列索引,工作表部分);
}
}
专用void InsertHorizontalPageBreak(uint行索引、工作表部件工作表部件)
{
划船休息=
new Break(){Id=(uint32值)行索引,Max=(uint32值)16383U,ManualPageBreak=true};
RowBreaks rb=worksheetPart.Worksheet.GetFirstChild();
if(rb==null)
{
rb=新的换行符();
rb.ManualBreakCount=(UINT32值)0;
rb.Count=(uint32值)0;
工作表部分工作表追加(rb);
}
rb.Append(行中断);
rb.ManualBreakCount++;
rb.Count++;
}
专用void InsertVerticalPageBreak(uint列索引,工作表部件工作表部件)
{
ColumnBreaks cb=worksheetPart.Worksheet.GetFirstChild();
如果(cb==null)
{
cb=新列中断();
cb.ManualBreakCount=(UINT32值)0;
cb.Count=(uint32值)0;
工作表部分工作表追加(cb);
}
中断br=
new Break(){Id=(uint32值)columnIndex,Max=(uint32值)1048575U,ManualPageBreak=true};
cb.追加(br);
cb.ManualBreakCount++;
cb.Count++;
}