是否可以向数据透视表添加手动分页符(Excel Interop)?

Is it possible to add manual page breaks to PivotTables (Excel Interop)?

当以编程方式生成 "normal" Excel sheet 时,可以将范围的分页符 属性 设置为 xlPageBreakManual,然后您可以指定分页的位置代码如下:

workbook.Worksheets[0].VPageBreaks.Add(sheet.Range["G1"]); 

...但这在打印数据透视表时可能吗?我不这么认为,因为数据透视表是从数据源提供的(在我的例子中是 "raw data" 的一页,我随后隐藏了它),但如果是的话,我想知道如何。

这就是我现在为打印准备 PivotTablized sheet 所做的工作:

private void FormatPivotTable()
{
    . . .
    ConfigureForPrinting(_xlPivotTableSheet.UsedRange.Rows.Count);
}

private void ConfigureForPrinting(int finalRow)
{
    string lastColumn = GetExcelTextColumnName(_xlPivotTableSheet.UsedRange.Columns.Count);
    string printArea = String.Format("A1:{0}{1}", lastColumn, finalRow);
    _xlPivotTableSheet.PageSetup.PrintArea = printArea;
    _xlPivotTableSheet.PageSetup.Orientation = XlPageOrientation.xlLandscape;
    _xlPivotTableSheet.PageSetup.Zoom = false;
    _xlPivotTableSheet.PageSetup.FitToPagesWide = 1;
    _xlPivotTableSheet.PageSetup.FitToPagesTall = 50;

    _xlPivotTableSheet.PageSetup.LeftMargin = _xlApp.Application.InchesToPoints(0.5);
    _xlPivotTableSheet.PageSetup.RightMargin = _xlApp.Application.InchesToPoints(0.5);
    _xlPivotTableSheet.PageSetup.TopMargin = _xlApp.Application.InchesToPoints(0.5);
    _xlPivotTableSheet.PageSetup.BottomMargin = _xlApp.Application.InchesToPoints(0.5);
    _xlPivotTableSheet.PageSetup.HeaderMargin = _xlApp.Application.InchesToPoints(0.5);
    _xlPivotTableSheet.PageSetup.FooterMargin = _xlApp.Application.InchesToPoints(0.5);

    string rangeToRepeat = string.Format("$A:[=12=]", lastColumn);
    _xlPivotTableSheet.PageSetup.PrintTitleRows = rangeToRepeat;
}

用户想要的是每个逻辑数据块都放在一个 sheet 上,这样一个块(5 行)不会跨越多个 sheet。 IOW,如果块开始时当前页上的 space 行少于 5 行,则使用分页符跳到下一页。

数据透视表可以做到这一点吗?

我理解,当您提到 "logical blocks of data" 时,它表示对应于 PivotFieldItem 的数据。如果是这种情况,请尝试以下操作:

将这些 PivotTable 属性设置为 TRUE:

ActiveSheet.PivotTables("PivotTable1").PrintTitles = True
ActiveSheet.PivotTables("PivotTable1").RepeatItemsOnEachPrintedPage = True

同时设置为 TRUE LayoutPageBreak 属性 的 PivotField ,您希望在每次更改项目时为其设置分页符:

ActiveSheet.PivotTables("PivotTable1").PivotFields("Class").LayoutPageBreak = True

还需要将此属性设置为TRUE,以防只有一条记录的项目。

ActiveSheet.PivotTables("PivotTable1").PivotFields("Class").LayoutBlankLine = True

根据需要替换 "PivotTable1" 和 "Class" 值

虽然上面的命令在 VBA 中,但它们应该可以让您很好地了解如何使用 C#

设置这些属性