尝试隐藏最后一列失败并显示错误“无法将对象移出工作表”

时间:2012-05-10 04:31:28

标签: c# excel excel-interop

因此,出于某种目的,我需要在excel的最后一列中插入注释。

由于我不希望用户能够看到我插入的评论,因此我尝试隐藏该列。

不知何故,它给了我一个错误“无法将对象移出工作表”

Constants.cs

HIDDEN_DATA_COL =  16384; // Which is last column in excel 2007

MyUtil.cs

Excel.Range range = ws.get_Range(ws.Cells[1, Constants.HIDDEN_DATA_COL], ws.Cells[1, Constants.HIDDEN_DATA_COL]);
 range.AddComment(result);
 range.Comment.Shape.Width = 50;
 range.Comment.Shape.Height = 50;
 range.EntireColumn.Hidden = true;

我也做了一些试验:

  • 删除range.EntireColumn.Hidden并且代码正常。
  • 将HIDDEN_DATA_COL更改为小于10的数字也会使运行时错误消失。

有关如何修复它的想法吗?

3 个答案:

答案 0 :(得分:2)

隐藏”表格最后一栏中的评论可能不是解决原始问题的最佳方法

您遇到了无法在代码中移除对象错误的问题,但即使您设法执行此操作,只要用户试图隐藏或插入任何列,您的用户就会面对它。

以下是Microsoft建议如何处理此问题:http://support.microsoft.com/kb/211769


由于这可能是XY issue的情况,我会建议一些解决方法。

实际上,在您的情况下,您可能 隐藏您在其他地方的评论,例如在任何隐藏的单元格中,如果您希望用户不要看到它,只是保护你的床单不受隐藏的细胞。

如果您不想保护,可以将评论存储在另一张表格中,并使用xlVeryHidden property将其隐藏在VBA中(用户无法取消隐藏不带VBA的表格)。

答案 1 :(得分:1)

首先选择评论栏。

 range.AddComment(result);
 range.Comment.Shape.Width = 50;
 range.Comment.Shape.Height = 50;
 range.Columns.Cells.Select();
 range.Columns.EntireColumn.Select();
 range.Columns.EntireColumn.Hidden = true;

答案 2 :(得分:0)

问题不仅在于隐藏列而且还为了减小列的宽度,同样的错误也会出现。要修复=获取评论信息,将其发布/粘贴到不同的单元格中进行保存。然后删除注释,调整列并再次为之前的单元格创建注释。对所需工作表上的每个注释执行此操作。 希望这会有所帮助,享受。 BigEEE:)