本篇中将簡單記錄下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:

代碼:在我們的代碼中添加資料源:
如下:
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為:
這就完成了我們的一個簡單的多表頭資料導出報表。
demo2中我們将來嘗試下他的統計公式和函數計算(利用&=&=計算):
excel模闆2:northwind的order details表
代碼:和上面不同的就隻有幾句:
1 var order = getdatatable(@"select * from [order details]
2 where [order details].orderid=10248");
3 order.tablename = "order";
4
5 designer.setdatasource(order);
excel效果:
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 }