【问题标题】:OpenXML SDK - Setting excel page break to a certain number of columnsOpenXML SDK - 将 excel 分页符设置为一定数量的列
【发布时间】:2012-07-08 07:22:12
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: c# excel-2007 openxml-sdk


    【解决方案1】:

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

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

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

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

    以下示例演示了垂直分页符的插入。 函数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++;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 2016-10-06
      相关资源
      最近更新 更多