2012-01-11 83 views
6


我需要完全隐藏excel列。我用下面的代码,但没有工作:
如何隐藏excel列?

public void Hide (params string[] columns) 
{ 
    foreach(var column in columns) 
    { 
     Range range = (Range) oSheet.Columns[column, Type.Missing]; 
     range.EntireColumn.Hidden = true; 
    } 
} 

我在想什么?

回答

2

上面的代码段正在工作..对不起家伙!问题在于,我的同事曾经在保存文件之前自动适应所有列,这将覆盖上面的设置。是的,一个名为CloseFile()的函数可以执行两个任务,格式并保存..许多责任,呃?

+1

为什么会自动调整和隐藏碰撞?我需要做两个 - 隐藏某些行(不是列),但也使用自动调整。 – 2015-11-12 16:04:13

2

事实证明,隐藏您指定的行和列的范围并不是一件容易的事。这里是你如何做到这一点,在两个简单的步骤:

1)命名工作表:

private Worksheet _xlSheet; 

2)现在,命名范围,包括第一行和列隐藏,然后在最后一排,并列隐藏起来,就像这样:

var hiddenRange = yourWorksheet.Range[_xlSheet.Cells[42, 1], _xlSheet.Cells[999, 13]]; 
hiddenRange.EntireRow.Hidden = true; 

这是假设你想要隐藏的第一行是42,等等。很明显,你会想改变这些硬编码值。

举个例子,这里有一些实际的代码,使用常量和变量,而不是硬编码的丘壑,这是为了响应一个布尔值,其值指示范围是否应被隐藏或不:

private bool _hide; 
private int _curTopRow; 
private static readonly int ITEMDESC_COL = 1; 
private static readonly int TOTALS_COL = 16; 
. . . 
if (_hide) 
{ 
    var hiddenRange = _xlSheet.Range[_xlSheet.Cells[_curTopRow, ITEMDESC_COL], _xlSheet.Cells[_curTopRow+3, TOTALS_COL]]; 
    hiddenRange.EntireRow.Hidden = true; 
} 

请注意,您需要以引用Microsoft.Office.Interop.Excel程序集。