有谁知道如何设置excel分页符以包含使用C#和OpenXML SDK的一定数量的列?我想要做的是让x列出现在一个页面上。我原本以为设置打印区域会做,但事实并非如此。我找不到任何引用来执行此操作。OpenXML SDK-将excel分页符设置为一定数量的列
这是在Excel电子表格的“分页视图”中手动完成的,您在其中拖动垂直虚线以包含更多列。
由于
有谁知道如何设置excel分页符以包含使用C#和OpenXML SDK的一定数量的列?我想要做的是让x列出现在一个页面上。我原本以为设置打印区域会做,但事实并非如此。我找不到任何引用来执行此操作。OpenXML SDK-将excel分页符设置为一定数量的列
这是在Excel电子表格的“分页视图”中手动完成的,您在其中拖动垂直虚线以包含更多列。
由于
性OpenXML SDK手动水平分页符和手动垂直分页符之间进行区分。
要以编程方式插入水平分页符,请使用RowBreaks
和Break
类。 RowBreaks
类表示工作表中所有水平分页符的集合。
ColumnBreaks
和Break
类允许您插入垂直分页符。类保存工作表的所有垂直分页符。
以下示例演示垂直分页符的插入。 函数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++;
}
我的回答有帮助吗? – Hans 2012-08-20 17:29:03