2012-01-11 78 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程序集。