有谁知道如何使用 C# 和 OpenXML SDK 设置 excel 分页符以包含一定数量的列?我想要做的是让 x 列出现在一页上。我原本以为设置打印区域会这样做,但事实并非如此。我找不到任何参考来做到这一点。
这是在 Excel 电子表格的“分页视图”中手动完成的,您可以在其中拖动垂直虚线以包含更多列。
谢谢
有谁知道如何使用 C# 和 OpenXML SDK 设置 excel 分页符以包含一定数量的列?我想要做的是让 x 列出现在一页上。我原本以为设置打印区域会这样做,但事实并非如此。我找不到任何参考来做到这一点。
这是在 Excel 电子表格的“分页视图”中手动完成的,您可以在其中拖动垂直虚线以包含更多列。
谢谢
OpenXML SDK 区分手动水平分页符和手动垂直分页符。
要以编程方式插入水平分页符,请使用RowBreaks
andBreak
类。该类RowBreaks
表示工作表中所有水平分页符的集合。
ColumnBreaks
and类Break
允许您插入垂直分页符。该类
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++;
}