无法设置Range类的隐藏属性c#excel interop

时间:2016-01-20 16:26:34

标签: c# excel interop

我正在尝试在Excel Range对象上设置Hide = false,并且我继续得到"无法设置Range类的隐藏属性"例外。我的工作表没有受到保护,我在该范围内没有合并的单元格。

我这样做:

    reportSheet.Unprotect("foo");
    int maxUsedRow = reportSheet.UsedRange.Rows.Count;
    int maxUsedColumn = reportSheet.UsedRange.Columns.Count;
    reportSheet.Cells.Range["A5", reportSheet.Cells[maxUsedRow, maxUsedColumn]].Hidden = false;

有趣的是: 1.从不在代码中的任何地方,我明确地将Hidden属性设置为true,但这是编程操作之后的结果。 2.如果我执行以下操作,我不会收到此错误,但它也不起作用。

    int rowNum = 5;
    reportSheet.Rows[rowNum].Hidden = false;

有什么想法吗?

我试图在新项目中重新创建此行为,并且我意识到现有代码中的某些内容必须设置隐藏属性。我通过它调试,发现它是FormulaHidden属性。这可能会覆盖Hidden属性并阻止它以编程方式重置,因为它会超过Hidden吗?

1 个答案:

答案 0 :(得分:0)

我相信你想要EntireRowEntireColumn财产。正如@StephenRoss正确指出的那样,你本身并不能隐藏范围。您可以隐藏/取消隐藏行和列,但它不像您可以隐藏单元格B34。因此,我不认为Hidden在任何不是行或列的实体上起作用。

以下是根据您的代码段取消隐藏A5中每个行和列到数据末尾的示例:

int maxUsedRow = reportSheet.UsedRange.Rows.Count;
int maxUsedColumn = reportSheet.UsedRange.Columns.Count;

Excelx.Range r = reportSheet.Cells[maxUsedRow, maxUsedColumn];
reportSheet.Range["A5", r.Address].EntireColumn.Hidden = false;
reportSheet.Range["A5", r.Address].EntireRow.Hidden = false;