2016-01-20 36 views
0

我想在Excel范围对象上设置Hide = False,并且不断设置“无法设置Range类的隐藏属性”异常。我的工作表不受保护,我没有合并单元格。无法设置范围类的隐藏属性c#excel interop

我这样做是这样的:

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.不要在代码的任何地方,我会明确的隐藏属性设置为true,然而这是程序操作后,什么样的结果。 2.如果我执行以下操作,则不会收到此错误,但它也不起作用。

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

任何想法?


我试图重新创建一个新项目,这种行为,我意识到在现有代码的东西必须被设置隐藏属性。我通过它调试,发现它是FormulaHidden属性。这是否可以覆盖隐藏属性,并防止它以编程方式重置,因为它超过了隐藏?

+0

尝试调试它,并找出你传递的其他范围以确保它是有效的。 –

+0

我相信设置'Range'的'Hidden'属性'Range'必须跨越整行或整个列。我不相信在你的第一个片段中,你跨越整个行或列。当您选择整个第五排时,您的第二个片段看起来更有可能起作用。 –

+0

变化之风,我相信我通过我的第一个片段的范围是有效的。什么会使它失效? – rsnell

回答

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; 
相关问题