easy ui 1.5 采用jxl第三方包导出excel表格
今天紧接着再写一份博客吧,在此谢谢大家的支持和鼓励,我和一如既往,坚持努力的学习的。昨天我大概把权限管理框架介绍下,但是大部分web系统都
是需要导入导出excel表格功能的。今天我就用大家很熟悉的jxl方式导出excel表格,此功能支持导出可选择项。不知道小伙伴们是怎么实现功能的,是通过easy ui 相关函数直接把需要导出的数据传到服务器,还是通过主键通过后台查询方式再导出,我采用的是后者方法。效果图如下所示:
服务器端代码我是考虑行数和列数有选择的情况下的,行数是参数穿过来的,至于列数需要在客户端做个dialog让客户来选择的,由于时间紧迫就没做了,这个其实也很简单。以下是服务端关键代码,是用servlet写的。
// 创建Excel工作薄
WritableWorkbook wwb;
wwb = Workbook.createWorkbook(os);
// 添加第一个工作表并设置第一个Sheet的名字
WritableSheet sheet = wwb.createSheet(sheetName, 0);
Label label;
for (int i = 0; i < title.length; i++) {
label = new Label(i, 0, title[i]); // 三个参数分别表示col+1列,row+1行,标题内容是title。
sheet.addCell(label); // 将定义好的单元格添加到工作表中
}
// 单元格填充数据
Label labels = null;
for (int i = 0; i < listData.size(); i++) {// 控制行数
for (int j = 0; j < title.length; j++) {// 控制列数
TUser user = listData.get(i);
for (Entry<String, Object> vo : mapField.entrySet()) {
String proName = (String) vo.getValue();
if (proName.equals(title[j])) {
String key = vo.getKey();
// 通过反射取对象的值
Field[] fields = TUser.class.getDeclaredFields();
for (Field f : fields) {// 控制输出列数
f.setAccessible(true);// 由于对象属性值通过get方法取值很麻烦,这次通过反射机制来取值
String field = f.toString().substring(f.toString().lastIndexOf(".") + 1);
if (f.get(user) != null && key.equals(field.trim())) {
labels = new Label(j, i + 1, f.get(user).toString());
sheet.addCell(labels);
}
}
break;
}
}
}
}
客户端需要选择多列,js如下图:
idsArray =new Array();
//实现刷新栏目中的数据
var rowAll = $('#dg').datagrid('getChecked');
for(var i =0;i<rowAll.length;i++){
idsArray.push(rowAll[i].id);
}
window.location.href="../servlet/ExcelTest?ids="+idsArray.toString();
至于列数选择,我没做dialog,所以没有效果图的,应该是可选择列数,该功能默认只输入四列,是在服务端直接控制的,如下代码
String ids = request.getParameter("ids");// 接收参数
String[] title = { "编号", "用户名称", "登录名称", "密码" };
String fileName = "用户列表信息";
String sheetName = "用户详细信息";
Map<String, Object> protopy = new LinkedHashMap<String, Object>();
protopy.put("id", "编号");
protopy.put("username", "用户名称");
protopy.put("loginName", "登录名称");
protopy.put("password", "密码");
protopy.put("createTime", "创建时间");
protopy.put("sex", "性别");
protopy.put("address", "用户地址");
UserDao userDao = new UserDaoImpl();
List<TUser> listData = userDao.getAllUserByList(ids);
excelImport(listData, title, protopy, fileName, sheetName, response);
ok,导入就写到这了,明天继续把导入和大家介绍下,谢谢大家留言指出问题bug,互相交流!