这里记录一些常用的API,包括对于获取整个在线excel的数据、获取当前sheet页数据、使用钩子函数等。
- 获取Excel数据
可以将获取到的数据传递到后端通过JSONArray来获取,它是一个一个的sheet页对象的数组,可以通过后端解析出来之后再通过poi将数据下载。luckysheet.getAllSheets()
另外可以通过luckysheet.toJson().title来获取下图中的标题,将其作为导出的文件名。
- 导出luckysheet数据到excel
在lucksheet的API文档中有提到对于数据的导出,我是参考这个帖子进行导出的,并对其中做了一点小的修改,如果有问题,大家可以互相交流学习:
主要的问题是此博客中的poi版本可能较低,有些方法在我用的4.1.2的版本中用法已经变了,需要进行修改,主要的修改在方法setCellValue中,大家如果有跟我是类似版本的,可以试用下。
switch (vt) {
case 0:
style.setVerticalAlignment(VerticalAlignment.CENTER);
break;
case 1:
style.setVerticalAlignment(VerticalAlignment.TOP);
break;
case 2:
style.setVerticalAlignment(VerticalAlignment.BOTTOM);
break;
}
switch (ht) {
case 0:
style.setAlignment(HorizontalAlignment.CENTER);
break;
case 1:
style.setAlignment(HorizontalAlignment.LEFT);
break;
case 2:
style.setAlignment(HorizontalAlignment.RIGHT);
break;
}
另外,对于填充值的地方,我也简单做了下修改,通过判断单元格内数据格式去设置写入到excel中的格式,不过我在试用时遇到了一点小问题,暂时还没时间仔细排查问题所在,大家慎用:
//填充值
if (jsonObjectValue != null && jsonObjectValue.get("f") != null) {
cell.setCellValue(value);
} else {
cell = setCellValueByType(cell, jsonObjectValue, value);
}
private static XSSFCell setCellValueByType(XSSFCell cell, JSONObject jsonObjectValue, String value) throws ParseException {
JSONObject ct = jsonObjectValue.getJSONObject("ct");
String t = ct.getString("t");
switch (t){
case "g":
case "s":
cell.setCellValue(value);
break;
case "n":
cell.setCellValue(Double.valueOf(value));
break;
case "d":
String fa = ct.getString("fa");
if (!fa.equalsIgnoreCase("General")){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(fa);
cell.setCellValue(simpleDateFormat.format(simpleDateFormat.parse(value)));
}else {
cell.setCellValue(value);
}
break;
default:
cell.setCellValue(value);
}
return cell;
}
这里附录下对于lucksheet单元格格式介绍:
- 钩子函数
同样,先附录下钩子函数的介绍:
我这里主要用到了两个钩子函数,一个是在sheet页删除时同时去删除我存在map中的部分数据,另一个是在sheet页创建时顺便初始化部分数据,使用如下:
var options = {
container: 'luckysheet', //luckysheet为容器id
title: "EXCEL模板", // 设定表格名称
lang: 'zh', // 设定表格语言
gridKey: "excel001",
data: eval(returnValue),
hook: {
sheetDeleteAfter : function (op) {
//这个是我创建的前端map
excel_modular.delete(op.sheet.index);
},
sheetCreateAfter : function (op) {
newsheet = Object.create(null);
op.sheet.celldata = [{"r":0,"c":0,"v":{"v":"数据起始位置","m":"数据起始位置","ct":{"fa":"General","t":"n"}}},{"r":0,"c":1,"v":{"v":"数据起始位置","m":"数据起始位置","ct":{"fa":"General","t":"n"}}} ];
newsheet.modularinfoId = null;
excel_modular.set(op.sheet.index,newsheet);
}
},
functionButton:
'<button id="savemodel" class="btn btn-primary btn-danger" style=" padding:3px 6px; font-size: 12px; margin-right: 10px;">保存模板</button>'
}
luckysheet.create(options);