全栈低码设计开源框架 json-script-rule 实战开发导出功能

exports插件

该插件用于导出数据到excel或者word之中,导出word功能需要手动在pom中添加com.deepoove poi-tl依赖,因为该依赖将导致大量的jar包被引入,所以默认为不依赖。导出的过程为先通过get插件查询出数据,之后再将数据灌入到指定的模板中。exports插件底层采用SXSSFWorkbook技术,因此不会造成内存溢出问题,对比easy poi,该插件不仅支持自定义模板,而且性能也优于easy poi,在同一台机器上反复测试,结论是导出10万条数据,exports插件耗时2.1-2.6秒之间,而使用easy poi则是在4.588秒左右。下面是导出的json用例

{
    "actions": [
        {
            "name":"test_export",
            "exports":{
                "word":{
                    "outFilePath":"D:/asddsa/laimi.docx",
                    "responseFileName":"word response file name",
                    "relativePath":"/template1.docx",
                    "data":{"suo":"value","sBillNo":"no.11232","dCreatetime":"2020-10-21 10:11:11"}
                },
                "excel":{
                    "responseFileName":"excel response file name",
                    "absolutePath":"D:/xxxx/asddsa.xlsx",
                    "sheets":[
                        {
                            "action":{
                                "name":"asddsa",
                                "get": {
                                    "relation": {
                                        "classes":["bao.ZsImport"]
                                    },
                                    "page":{"pageSize":0},
                                    "condition":{
                                        "type":"or",
                                        "where":{"eq":{"bao.ZsImport.name":["王小二mysql","李小四mysql"]}}
                                    },
                                    "fields":["#&bao.ZsImport.id","name","birthDay","#&qian@qq","#$ifnull(&remark,&name)@remark"]
                                }
                            },
                            "tsn":"lanliya",
                            "nsn":"sheetNameNo.1",
                            "start":5,
                            "params":{"asd":"2020-10-20 10:10:10"}
                        },{
                            "action":{
                                "name":"qweewq",
                                "get": {
                                    "relation": {
                                        "classes":["test.business.po.bao.ZsImport","ZsImport2"]
                                    },
                                    "page":{"pageSize":0}
                                }
                            },
                            "nsn":"sheetNameNo.2",
                            "start":4
                        }
                    ]
                }
            }
        }
    ]
}

参数说明

  • sheets:表示所要导出的sheet对象的数组
  • outFilePath:默认导出路径,值不能是一个目录,应该是一个包含文件名的绝对路径名。别名是"out",如果不设置该属性则会通过客户端响应弹窗来手动设置导出excel文件的路径
  • responseFileName:客户端响应后弹出框里默认的文件名,别名是"rfn",设置该属性时应该包含文件名的后缀名
  • aPath:模板绝对路径,别名aPath,如果不设置模板的路径将会使用默认模板导出数据
  • rPath:模板相对路径,别名rPath,如果不设置模板的路径将会使用默认模板导出数据
  • cacheRow:别名是"cache",表示达到多少缓存数据行数时将内存数据刷新到硬盘上。合并单元格时如果总数据行大于此值则将无法正确合并单元格,默认是SXSSFWorkbook.DEFAULT_WINDOW_SIZE 100

sheet Parameter Description

  • action:此处非数组,可以通过这个属性来调用action动作模型,导出时只能选择get模型
  • defaultValue:数据为空时单元格的默认值,别名default,不设置则用/符号代替
  • dateFormat:如果params属性中含有符合日期格式的字符串值,则该属性将指定这些字符串应以哪种格式来展示,别名format,默认为"yyyy-MM-dd HH:mm:ss"
  • mergeCell:是否合并值相同的两个相邻列单元格,别名merge,使用该属性时需要注意JSRuleExportExcel中的cacheRow缓存行的设置,确保导出的总数据行数不小于该数值,否则将出现意外结果
  • wrapText:是否允许通过转义字符进行单元格换行操作,别名wrap,通常搭配lineBreakTag属性使用
  • lineBreakTag:换行操作的转义字符,别名是"lbt",wrapText为true时有效
  • tsn:tempSheetName,excel模板中对应的sheet的名称,别名tsn,如果不设置则按照json中sheet的数组序号来查找相应的模板
  • **nsn:- **newSheetName,导出的excel文件中的sheet的名称,别名"nsn",如果不设置则按照sheet+数字的方式来命名
  • dataLine:别名"start",数据加载的起始行号,行号与excel中的行号对应,它表示从模板中的哪一行开始加载表的数据,默认为第一行。这一行通常位于模板表头下面的第一行,在这一行中开发者要根据get插件返回的结果对列的名称进行定义,表示excel中的某一列对应数据库表的哪一列,如下
Header             Id                     name              birthDay
dataLine  entityName-fieldName      entityName-name         birthDay
  • containsHead:在未设置模板的情况下是否根据实体类信息默认导出一个表头,别名"ich",默认为true
  • params:动态参数集合,当前sheet中数据行以上除头行以外的任何一个地方由<>括起来的key都将替换成该参数中的值value
  • data:待导出的数据集合,如果该属性和action中的get插件同时存在,则优先该属性的数据导出
  • fieldMappings:设置要导出哪些列,别名为exports,该属性仅在未设置模板时有意义,该属性的顺序表示导出时对应的sheet列的头的顺序
    如果此属性未设置,则默认Po配置中的export属性来生成列头(export如果为空默认带前缀的字段名),同时导出所有的列。这些列是否有值和所查询的字段属性fields相关,fields如果为空表示查询所有字段,如果有值则应是带class前缀的字段(避免多表重复字段),否则将不会导出此列的数据
    如果此属性已设置,则根据该属性的设置来断定所要导出的列都有哪些,此时的key为字段别名,可参考别名表达式的写法,value为对应的列头的名称

uploads插件

上传插件用于上传文件,其属性如下

  • aPath:上传文件存放于服务器的绝对路径
  • rPath:上传文件存放于服务器的相对路径
  • base64Data:上传文件的数据流,文件字节码采用base64编码
"uploads":{
    "base64Data":"UEsDBBQACAgIAFZ1CVUAA......
}

5.1版本后新增csv导出

其属性如下:

  • aPath:导出的绝对路径
  • rPath:导出的相对路径
  • header:导出csv文件的头,字符串数组
  • data:导出csv文件的具体数据,类型为List<String[]>,该属性通常为空,由action中的get插件去查询来替代
  • action:当data属性为空时,该属性不能为空,使用action属性中的get插件可以从数据库中读取数据并作为data导出到csv文件中
    下面是一个实用的例子:
{
    "actions":[
        {
            "name":"asddsa",
            "exports":{
                "csv":{
                    "aPath":"D:/vcv3.csv",
                    "header":["id","name","salary","createTime"],
                    "data":[[1,"asd",44.3,"2024-10-10 10:10:10"],["2","qwe",45.3,"2024-09-09 09:09:09"]],
                    "action":{
                        "name":"queryCsvData",
                        "get":{
                            "relation": {
                                "classes":["TestClass"]
                            },
                            "condition":{
                                "where":{
                                    "eq":{"name":["www"]}
                                }
                            }
                        }
                    }
                }
            }
        }
    ]
}

当data和action插件同时存在时优先执行data里面的数据而不执行action里面的查询逻辑,因此如果你是想查库那么不应该将data拿出来

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容