| 魔界の仮面弁士様
いつもありがとうございます。
ご指摘の内容を反映したところ
無事にフィルターを設定することが出来ました。
dynamic型というのを今回初めて知りました。
とても勉強になります、ありがとうございます。
> C# 2010 以降をお使いのようですね
失礼しました。
環境を提示していませんでした。
仰る通りC# 2010以降(2012) です。
>ここでは String なのですね。string ではなく。
はい。
プリミティブ型(intなど)は全て小文字で、参照型(クラス)は初めは大文字に
というルールで作成していました。
ただ、他のPGには Int32 を使っている方もいて不思議に思っていました。
そちらの方が一般的でしょうか。
色々調査してみようと思います。
修正版のソースは以下のようになりました。
Excel.Application ExcelApp = new Excel.Application();
Excel.Workbooks books = ExcelApp.Workbooks;
Excel.Workbook Book = books.Add();
Excel.Sheets sheets = Book.Sheets;
Excel.Worksheet sheet = (Excel.Worksheet)sheets[1];
// データの設定
for (int x = 1; x <= 9; x++)
{
// タイトルの設定
String title = x + "の列";
SetData(sheet, x, 1, title);
// 数値の設定
for (int y = 1; y <= 10; y++)
{
int data = y + (x - 1) * 10;
SetData(sheet, x, y + 1, data.ToString());
}
}
// オートフィルターの設定
SetFilter(sheet);
Book.SaveAs(@"d:\tmp\a.xlsx");
Book.Close(false, Missing.Value, Missing.Value);
ExcelApp.Quit();
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(sheets);
Marshal.ReleaseComObject(Book);
Marshal.ReleaseComObject(books);
Marshal.ReleaseComObject(ExcelApp);
----関数群
private void SetData(Excel.Worksheet sheet, int x, int y, String data)
{
Excel.Range range0 = sheet.Cells;
Excel.Range range1 = range0.Item[y, x];
range1.Value2 = data;
Marshal.ReleaseComObject(range1);
Marshal.ReleaseComObject(range0);
}
private void SetFilter(Excel.Worksheet sheet)
{
Excel.Range range0 = sheet.Cells;
Excel.Range range1 = range0.Item[1, 1];
((dynamic)range1).AutoFilter();
Marshal.ReleaseComObject(range1);
Marshal.ReleaseComObject(range0);
}
----
以上。
|