为什么FreezePane只能在第一张纸上工作?

时间:2016-10-25 20:46:36

标签: c# excel excel-interop

我有这个代码可以正常工作,将FreezePane添加到第7行第3页第3页(从左边算起):

private void FreezePane(int rowNum, int colNum)
{
    Range cellToFreeze = (Range)_xlSheet.Cells[rowNum, colNum];
    cellToFreeze.Activate();
    cellToFreeze.Application.ActiveWindow.FreezePanes = true;
}

添加另外两张纸后(第二张纸包含数据作为数据透视表的来源,第三张纸包含数据透视表),我想在第三张/数据透视表表的同一位置添加一个冷冻窗格,所以我试过这个:

private void FreezePanePivotTable(int rowToFreeze, int colToFreeze)
{
    Range pivotTableCellToFreeze = (Range)_xlPivotTableSheet.Cells[rowToFreeze, colToFreeze];
    pivotTableCellToFreeze.Activate();
    pivotTableCellToFreeze.Application.ActiveWindow.FreezePanes = true;
} 

然而,崩溃与“ Range类的激活方法失败异常来源:Microsoft Office Excel 异常StackTrace:在System.RuntimeType.ForwardCallToInvokeMember(...

所以我想,“也许你只能在工作簿中有一个冷冻窗格”,并尝试只调用新方法(让第一张纸解冻),我得到这个看似奇怪的错误信息:“无法设置Font类的Size属性

发生此异常的地方在 second 表中 - 表3 /数据透视表的源数据!为什么突然设置字体大小会导致问题?第3418行是下面的最后一行:

var itemCodeLabelCell = _xlPivotDataSheet.Cells[1, 1];
itemCodeLabelCell.Value2 = "ItemCode";
itemCodeLabelCell.Style.WrapText = false;
itemCodeLabelCell.Style.Font.Size = 12;

在主(第一)表和其他表上添加freezepanes是否有不同的规则,或者FreezePanes和PivotTables不能共存,或者是什么?

1 个答案:

答案 0 :(得分:1)

如果SomeSheet尚未激活,则

SomeSheet.SomeRange.Activate()失败,因此可能是Range类的" Activate方法失败"。

您必须先激活工作表:

_xlPivotTableSheet.Activate();
pivotTableCellToFreeze.Activate();