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拿出来