本篇中将简单记录下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 }