有没有人知道如何设置excel分页符以使用C#和OpenXML SDK包含一定数量的列?我想要做的是让x列出现在一个页面上。我原本以为设置打印区域会这样做,但事实并非如此。我找不到任何参考来做这件事。
这是在excel电子表格的“分页符视图”中手动完成的,您可以在其中拖动垂直虚线以包含更多列。
由于
答案 0 :(得分:2)
OpenXML SDK区分手动水平分页符和手动垂直分页符。
要以编程方式插入水平分页符,请使用RowBreaks
和Break
类。
RowBreaks
类表示工作表中所有水平分页符的集合。
ColumnBreaks
和Break
类允许您插入垂直分页符。该
ColumnBreaks
类包含工作表的所有垂直分页符。
以下示例演示了垂直分页符的插入。
函数InsertVerticalPageBreak()
采用columnIndex(应该插入分页符)
和WorksheetPart。此函数首先检查工作表是否已包含
ColumnBreaks
集合。如果没有,将创建一个。然后该函数创建一个实例
Break
类的Id
属性,并将Max
属性设置为列索引。我还设置了ManualPageBreak
属性
到Excel能够处理的最大行数,以获得持续的垂直分页符。通过将属性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++;
}
函数来说明如何使用
添加一个水平分页符。
{{1}}