在向大家详细介绍VS DisplayInExcel()函数之前,首先让大家了解下在Excel中显示账号数据,然后全面介绍VS DisplayInExcel()函数,希望对大家有用。下面我们将把这些数据显示到Excel表格中。我们定义一个VS DisplayInExcel()函数用于创建Excel表格,然后将容器中的账号数据填充到Excel表格中:
- public static void DisplayInExcel(IEnumerable<Account> accounts,
- Action<Account, Excel.Range> DisplayFunc)
- {
- var xl = new Excel.Application();
- xl.Workbooks.Add();
- xl.Visible = true;
- xl.Cells[1, 1].Value2 = "Name";
- xl.Cells[1, 2].Value2 = " Balance";
- xl.Cells[2, 1].Select();
- foreach (var ac in accounts)
- {
- DisplayFunc(ac, xl.ActiveCell);
- xl.ActiveCell.get_Offset(1, 0).Select();
- }
- xl.get_Range("A1:B3").Copy();
- }
然后,我们在Main()函数的底部,按照如下的方式调用VS DisplayInExcel()函数,最终完成Excel表格的创建和数据的填充:
- DisplayInExcel(checkAccounts, (account, cell) =>
- {
- // This multiline lambda will set
- // custom processing rules.
- cell.Value2=account.Name;
- cell.get_Offset(0, 1).Value2 = account.Balance;
- if (account.Balance < 0)
- {
- cell.Interior.Color = 255;
- cell.get_Offset(0, 1).Interior.Color = 255;
- }
- }
#t#这里我们使用了Lambda表达式,由它来对数据填充的逻辑进行具体的定义,最终完成数据的填充。同时,它还会检查Balance的值,如果为负值,则将表格填充为红色,表示这个账号已经赤字了。最后,为了使得Excel表格更加美观,我们让Excel表格根据内容自动调整表格的宽度。在VS DisplayInExcel()函数的末尾,我们添加如下的代码:
xl.Columns[1].AutoFit();
xl.Columns[2].AutoFit();
在这里,有过Office开发经验的朋友可能会感到奇怪,AutoFit()函数可以被Columns的返回结果直接调用而无需进行类型转换吗?的确,在C# 3.0中,要想调用AutoFit()函数,必须对Columns的返回值进行类型转换,上面的代码应该写成:
- // C# 3.0 code. Not necessary in C# 4.0!
- ((Range)xl.Columns[1]).AutoFit();
- ((Range)xl.Columns[2]).AutoFit();
但是在C# 4.0中,因为有了dynamic类型的支持,繁琐的类型转换将不再需要。在C# 4.0中,从COM接口返回的Object类型的对象,被自动当做dynamic类型来处理。我们前面曾经介绍过,因为动态类型的迟绑定特性(late binding),dynamic类型可以调用任何函数,所以无需再进行类型转换,也不会产生编译错误。在运行的时候,动态语言运行时(DLR)会动态查找对象真正的类型而调用相应的函数。