0
点赞
收藏
分享

微信扫一扫

luckysheet使用——导出并下载excel数据及钩子函数的使用等

yellowone 2022-03-26 阅读 146

这里记录一些常用的API,包括对于获取整个在线excel的数据、获取当前sheet页数据、使用钩子函数等。

  • 获取Excel数据
    luckysheet.getAllSheets()
    
    可以将获取到的数据传递到后端通过JSONArray来获取,它是一个一个的sheet页对象的数组,可以通过后端解析出来之后再通过poi将数据下载。
    另外可以通过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);
举报

相关推荐

0 条评论