ここで、Excel スプレッドシートに "ListObject" (私は "Sort/Filter Control" と考えています) を追加する方法を見つけました。これを実現する方法の簡単な例を次に示します。
// add the data
_xlSheetListObjectTest.Cells[1, 1] = "Marionberry";
_xlSheetListObjectTest.Cells[2, 1] = "Apple";
_xlSheetListObjectTest.Cells[3, 1] = "Strawberry";
_xlSheetListObjectTest.Cells[4, 1] = "Cashew";
_xlSheetListObjectTest.Cells[5, 1] = "Kumquat";
_xlSheetListObjectTest.Cells[6, 1] = "Pomegranate";
_xlSheetListObjectTest.Cells[7, 1] = "Banana";
_xlSheetListObjectTest.Cells[8, 1] = "Pineapple";
_xlSheetListObjectTest.Cells[9, 1] = "Kiwi";
_xlSheetListObjectTest.Cells[10, 1] = "Huckleberry";
_xlSheetListObjectTest.Cells[11, 1] = "Gooseberry";
// create a Sort/Filter Control for the data above
Excel.ListObject fruitList =
_xlSheetListObjectTest.
ListObjects.Add(Excel.XlListObjectSourceType.xlSrcRange,
_xlSheetListObjectTest.Range[
_xlSheetListObjectTest.Cells[1, 1],
_xlSheetListObjectTest.Cells[11, 1]],
Type.Missing, Excel.XlYesNoGuess.xlNo);
これにより、次の図に示すように、「ListObject」が入力されたセルの真上に配置されます。
ListObject をドロップダウンすると、次のようになります。
これは、その種の要件に対して素晴らしい機能です (ほんの少しのコードで大成功です)。ただし、月のデータの列を含むシートがあり、選択した月の列を除外する必要があります (並べ替えは不要であり、望ましくありません)。レポートの生成時に複数の月が選択された場合の外観は次のとおりです。
ただし、ユーザーは次のように、より少ない月数 (1 か月から 13 か月まで) のレポートを生成できます。
したがって、フィルタリング操作の範囲が表示されている月のデータ(多くの行、多くの列)にまたがる「ListObject」が必要であり、ユーザーが特定の月の選択を解除して、選択解除された月の行全体を非表示にする機能が必要です.
ただし、すべての月のデータの範囲を定義するこのコードでは、次のようになります。
Excel.ListObject monthFilterControl = // Resharper complains that this is not used (grays out "monthFilterControl"), but this is what creates the control
_xlSheet.
ListObjects.Add(Excel.XlListObjectSourceType.xlSrcRange,
_xlSheet.Range[
_xlSheet.Cells[COLUMN_HEADING_ROW, MONTH1_COL],
_xlSheet.Cells[_xlSheet.UsedRange.Rows.Count, _xlSheet.UsedRange.Columns.Count - 1]],
Type.Missing, Excel.XlYesNoGuess.xlNo);
問題は、複数の ListObjects が月のヘッダー列に沿って曲がり、その下の行を押し下げ、行の位置がずれることです。それだけでなく、彼らが提供する並べ替えとフィルター処理は、私の厳しい基準を満たしていません。月の列全体を除外する代わりに、次のようにします。
だから私が欲しいのは:
There should only be one ListObject control in a single cell a row above the month columns, not one in every month header cell.
A Filter list (array of checkboxes) of all Months; deselecting "September" would cause that month column to hide, etc.
これは可能ですか?もしそうなら、どうすればそれを達成できますか?