3. 在Excel中显示账号数据
上一步我们完成了数据的准备,下面我们将把这些数据显示到Excel表格中。我们定义一个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()函数的底部,按照如下的方式调用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; } });
这里我们使用了Lambda表达式,由它来对数据填充的逻辑进行具体的定义,最终完成数据的填充。同时,它还会检查Balance的值,如果为负值,则将表格填充为红色,表示这个账号已经赤字了。最后,为了使得Excel表格更加美观,我们让Excel表格根据内容自动调整表格的宽度。在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)会动态查找对象真正的类型而调用相应的函数。
出处:蓝色理想
责任编辑:bluehearts
上一页 Visual Studio 2010特性支持Office [2] 下一页 Visual Studio 2010特性支持Office [4]
◎进入论坛计算机技术版块参加讨论
|