参考博客:http://www.cnblogs.com/wuhuacong/archive/2011/02/23/1962147.html
使用的aspose类库: http://download.csdn.net/detail/anderson_linqf/4901496
大家好,客户很多时候会给一个excel模板我们,然后按照所给的excel格式进行报表。
比如,用户给了下面一个excel模板:(上面是一个标题,下面是一个货物的信息)
我以往的做法:从数据库里面拿到所需数据之后保存在一个datatable里面,然后就傻傻的:
cell[2,0].value = ****
cell[2,1].value =*****
cell[3,0].value = ***
********一个一个往空格里面填
这样的想法的确很简单,哪个格子需要填数据,就往哪个格子里面填东西,但是缺点也很容易想到:
这个excel的格式是不能改变的,如果用户突然打了个电话来说:对不起,能不能把单价放在前面,货物名放后面啊???
这时候,苦逼的码农就要重新:
cell[2,0].value = ####
cell[2,1].value =####
cell[3,0].value = #####
重新一个格子一个格子的填,那就太郁闷了。
我的意思是:不能把excel看出一个空表,写程序就是为了填好这个空表!!!
现在从aspose.cells中学会了一招:把excel看成一个说明文档,这个说明文档指导程序怎么填写数据。
下面是一个新的解决方法:
首先把excel模板的数据部分删掉,剩下主题,然后补充上你的数据库里面的查询表面和字段名:
代码如下:
//取所需的数据(自己写一个函数)
DataTable tb = GetDataTable("select goodsName , goodsPrice from tbGoods", "tbGoods");
Aspose.Cells.WorkbookDesigner designer = new WorkbookDesigner();
//给模板对象设置数据源
designer.SetDataSource(tb);
//excel模板的地址
string excelModel = @"E:\chengXu\ExcelTest3\ExcelTest3\files\mydesigner.xls";
designer.Open(excelModel);
designer.Process();//全自动赋值
//新生成的excel的保存地址
string fileToSave = @"E:\chengXu\ExcelTest3\ExcelTest3\files\create1.xls";
if (System.IO.File.Exists(fileToSave) == true)
{
System.IO.File.Delete(fileToSave);
}
designer.Workbook.Save(fileToSave);
aspose.cells还有用法值得学习,百度一下吧!