【问题标题】:try to hide last column fail with error "Cannot shift objects off sheet"尝试隐藏最后一列失败并出现错误“无法将对象移出工作表”
【发布时间】:2012-05-18 15:27:06
【问题描述】:

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

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

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

常量.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,代码就OK了。
  • 将 HIDDEN_DATA_COL 更改为小于 10 的数字也会使运行时错误消失。

知道如何解决它吗?

【问题讨论】:

    标签: c# excel excel-interop


    【解决方案1】:

    隐藏”工作表最后一列中的 cmets可能不是解决原始问题的最佳方法

    您在代码中遇到了无法将对象移出工作表错误的问题,但即使您设法做到了,您的用户在尝试隐藏或插入任何列时也会遇到它。

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


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

    实际上,在您的情况下,您可能会隐藏您的评论在其他地方,例如在任何隐藏的单元格中,如果您不希望用户看到它,只是保护您的工作表不被隐藏单元格。

    如果您不想保护,可以将 cmets 存储在另一个工作表中,并使用 xlVeryHidden property 使用 VBA 将其隐藏(用户无法在没有 VBA 的情况下取消隐藏工作表)。

    【讨论】:

      【解决方案2】:

      通过先选择评论列修复。

       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;
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2012-09-30
          • 2017-03-02
          • 2019-01-23
          • 2022-09-27
          • 1970-01-01
          • 1970-01-01
          • 2018-03-31
          • 1970-01-01
          • 2018-07-12
          相关资源
          最近更新 更多