最佳Excel导入实践(三)
相关链接
最佳Excel导入实践(一)
最佳Excel导入实践(二)
最佳Excel导入实践(三)
最佳Excel导入实践(四)
最佳Excel导入实践(五)
为了让系统能够识别待引入的Excel,用户提供的Excel必须满足一定格式上的要求。通常我们的做法是提供Excel模板让用户下载,然后用户往其中填入数据再提交给系统执行导入操作。本篇将主要介绍导入模板的生成。
上篇讲到的导入规则是此方案的核心,导入模板也将根据此规则动态生成。正如Excel导入最佳实践(一)中已经提到的,本方案中的Excel模板也将通过NPOI 生成。有关NPOI的帮助信息请见:http://www.cnblogs.com/tonyqus/archive/2009/04/12/1434209.html。里面记录了所有生成此模板Excel所需要的知识。
其实模板的生成主要就是写Excel表头,可用如下遍历方式实现:
HSSFSheet sht=wb.CreateSheet("销售订单");
HSSFRow row=sht.CreateRow(0);
Column col;
for(int i=0;i<regulation.Columns.Count;i++){
col=regulation.Columns[i];
row.CreateCell(i).SetCellValue(col.ColumnName);
}
HSSFRow row=sht.CreateRow(0);
Column col;
for(int i=0;i<regulation.Columns.Count;i++){
col=regulation.Columns[i];
row.CreateCell(i).SetCellValue(col.ColumnName);
}
当然,上面只实现了模板的最基本的功能--完成了Excel表实的定义。若想让模板更人性化、可用性更好,还可以加入数据有效性验证、表头和表体用颜色区分、需要描述的地方加上批注等。这些附加操作都可以在上面的NPOI的帮助找到,这里就不再重述。最终生成的模板Excel大致如下:
其中的下拉项是根据规则类中Column对象的RefField,RefTable,RefConvertField和RefFilter属性执行类似如下SQL语句得来:
SELECT RefConvertField FROM RefTable WHERE RefFilter
这样用户体验明显好了很多,而且下拉项是随系统中的数据而变化的,做到了模板的动态化,用Excel导入最佳实践(一)介绍的其它方法是很难实现的。再次为NPOI做一下广告:目前.net环境下最好的读写Excel组件!