使用Excel Interop FreezePanes时出错:生成的工作簿失去了结构

时间:2016-05-09 17:44:01

标签: c# excel-interop

我已经尝试了一段时间在新工作表上使用Microsoft.Excel.Interop运行以下代码,我将其添加到现有工作簿并动态填充,然后为了显示目的,我设置了以下3个属性:

worksheet.Application.ActiveWindow.SplitRow = 4;
worksheet.Application.ActiveWindow.SplitColumn = 1;
worksheet.Application.ActiveWindow.FreezePanes = true;

每次我在生成的工作簿中都有相同的错误:所有已经使用冻结窗格的其他工作表变为非结构化(B列的一半与C列重叠,以及其他有趣的图形细节......)。

我在检查Excel自动化的其他库(例如,ClosedXML)时发现的是其他人直接修改XML代码,因此他们不使用ActiveWindow,而是直接使用工作表本身。

我的问题可能来自于我不正确地修改ActiveWindow的属性吗? 如果是,是否有人知道是否可以通过ActiveWindow冻结窗格? 如果不是,有人知道它可以来自哪里吗?

提前致谢

Roddhes

1 个答案:

答案 0 :(得分:0)

您是否在设置属性之前激活了相应的工作表?我的意思是:

Worksheet.Activate();
Worksheet.Application.ActiveWindow.SplitRow = 4;
Worksheet.Application.ActiveWindow.SplitColumn = 1;
Worksheet.Application.ActiveWindow.FreezePanes = true;

作为帮助,您可以在这里找到一些代码示例以冻结顶行(请务必阅读其中的注释以获得更多代码改进):https://stackoverflow.com/a/5060792/232530

似乎冻结窗格也可以使用OpenXML完成。它在另一个SO线程中描述:Freeze Panes in OpenXml SDK 2.0 for Excel document