2012-01-11 5 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()という関数が2つのジョブを実行し、フォーマットして保存します。多くの責任はありますか?

+1

なぜ自動フィットと非表示が衝突するのですか?私は両方を行う必要があります - 特定の行(列ではありません)を非表示にするだけでなく、autofitを使用します。 –

2

あなたが指定した行と列の範囲を隠すことは、はるかに簡単なことではないことが判明しました。

1)ワークシートに名前を付け:ここでは、2つの簡単なステップで、あなたがそれを行う方法です

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アセンブリを参照します。

関連する問題