天天看點

報表中的Excel操作之Aspose.Cells(Excel模闆)

本篇中将簡單記錄下Aspose.Cells這個強大的Excel操作元件。這個元件的強大之處,就不多說,對于我們的報表總是會有導出Excel的處理,如果你使用微軟Excel的com元件,那麼對于簡單的操作還行,但是多餘複雜的模闆,那将是一個令人頭疼的事。在Aspose.Cells之下,将是一個簡單的事情。他可以導入導出excel操作,在本節将要說的就是他的際遇excel模闆的導出強大功能。

    多的不說,我們先來利用Northwind做兩個小demo。先說說Aspose.Cells的模闆文法:

&=DataSource.Field,&=[DataSource].[Field]是對DataTable和幾何類型的引用,将會從目前行開始豎直向下生成多行資料。

&=&=動态公式計算;{r}目前行,{c}目前列,{-n},{n}目前行或列的偏移量前n或後n。

&==是動态計算,如excel,if等語句。(if(logic_test,true_value,false_value))

還有其他更為複雜的彙總計算的表達式,這裡也不在這節多講,有興趣的朋友,可以去官網看看。我們先來個簡單的例子,光說,總是不行的,還是要代碼實踐才能說明一切:

Excel模闆1:

<a href="http://blog.51cto.com/attachment/201204/184943946.jpg" target="_blank"></a>

代碼:在我們的代碼中添加資料源:

如下:

View Code   

 1 var sql = @"select * from Customers   

 2                     where Customers.City ='London'";   

 3         var dt=GetDataTable(sql);   

 4         dt.TableName = "Customers";           

 5         WorkbookDesigner designer = new WorkbookDesigner();   

 6         designer.Open(MapPath("~/1.xls"));   

 7         //資料源   

 8         designer.SetDataSource(dt);   

 9         //報表機關   

10         designer.SetDataSource("ReportUtils", "xxxxx有限公司客戶資訊");   

11         designer.SetDataSource("ReportAdd", "London");   

12         //截止日期   

13         designer.SetDataSource("ReportDate", DateTime.Now.ToString("yyyy年MM月dd日"));          

14   

15         designer.Process();   

16   

17         designer.Save(string.Format("report.xls"), SaveType.OpenInExcel, FileFormatType.Excel2003, Response);   

18         Response.Flush();   

19         Response.Close();   

20         designer = null;   

21         Response.End();  

複制代碼 

代碼很簡單,就是添加了一個datatable,和幾個變量的資料源,我們所生成excel為:

<a href="http://blog.51cto.com/attachment/201204/185043464.jpg" target="_blank"></a>

這就完成了我們的一個簡單的多表頭資料導出報表。

Demo2中我們将來嘗試下他的統計公式和函數計算(利用&amp;=&amp;=計算):

Excel模闆2:Northwind的Order Details表

<a href="http://blog.51cto.com/attachment/201204/185109281.jpg" target="_blank"></a>

代碼:和上面不同的就隻有幾句:

Code   

1 var order = GetDataTable(@"select * from [Order Details]   

2                         where [Order Details].OrderID=10248");   

3         order.TableName = "Order";  

4   

5 designer.SetDataSource(order);  

Excel效果:

<a href="http://blog.51cto.com/attachment/201204/185220105.jpg" target="_blank"></a>

 View Code   

 1 protected void Page_Load(object sender, EventArgs e)   

 2    {   

 3        var s=Aspose.Cells.CellsHelper.GetVersion();     

 4        var sql = @"select * from Customers   

 5                    where Customers.City ='London'";   

 6        var dt=GetDataTable(sql);   

 7        dt.TableName = "Customers";   

 8        var order = GetDataTable(@"select * from [Order Details]   

 9                        where [Order Details].OrderID=10248");   

10        order.TableName = "Order";   

11        WorkbookDesigner designer = new WorkbookDesigner();   

12        designer.Open(MapPath("~/1.xls"));   

13        //資料源   

14        designer.SetDataSource(dt);   

15        designer.SetDataSource(order);   

16        //報表機關   

17        designer.SetDataSource("ReportUtils", "xxxxx有限公司客戶資訊");   

18        designer.SetDataSource("ReportAdd", "London");   

19        //截止日期   

20        designer.SetDataSource("ReportDate", DateTime.Now.ToString("yyyy年MM月dd日"));          

21   

22        designer.Process();   

23   

24        designer.Save(string.Format("report.xls"), SaveType.OpenInExcel, FileFormatType.Excel2003, Response);   

25        Response.Flush();   

26        Response.Close();   

27        designer = null;   

28        Response.End();   

29    }  

複制代碼  

 本文轉自 破狼 51CTO部落格,原文連結:http://blog.51cto.com/whitewolfblog/835228,如需轉載請自行聯系原作者