0
点赞
收藏
分享

微信扫一扫

Excel导出

Excel导出——POI

本次工具类的封装主要依赖于阿里巴巴的 JSON 包,以及表格处理的 POI 包,所以我们需要导入这两个库的依赖包,另外,我们还需要文件上传的相关包,毕竟我们在浏览器页面,做Excel 导入时,是上传的 Excel 文件。

详细内容参考:https://blog.csdn.net/sunnyzyq/article/details/121994504

Excel导出——EasyExcel

老项目主要采用的POI框架来进行Excel数据的导入和导出,但经常会出现OOM的情况,导致整个服务不可用。后续逐步转移到 EasyExcel,简直不能太好用了。

EasyExcel是阿里巴巴开源插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据量大起来容易OOM,解决了POI并发造成的报错。

详细内容参考:https://juejin.cn/post/7126677222034767886

其它

https://juejin.cn/post/6844903779167535117

碳排放单车明细-数据导出

  • 接口
@ApiOperation(value = 碳排放单车明细-数据导出, notes = 碳排放单车明细-数据导出)
@GetMapping(value = /exportXls)
public ModelAndView exportXls(HttpServletRequest request, SingleBusDetailExcelDto singleBusDetailDto) {
SingleBusDetailSearchDto singleBusDetailSearchDto = new SingleBusDetailSearchDto();
BeanUtils.copyProperties(singleBusDetailDto, singleBusDetailSearchDto);
List<BusSingleEmissionVo> li = singleBusDetailsService.getListByConditions(singleBusDetailSearchDto);
return excelUtil.exportXls(li,BusSingleEmissionVo.class,碳排放单车明细数据, singleBusDetailDto.getExportFields());
}
  • 实体
@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(description = 碳排放单车查询导出参数)
public class SingleBusDetailExcelDto extends SingleBusDetailSearchDto {

@ApiModelProperty(导出字段集)
private String exportFields;
}
@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(description = 碳排放单车明细查询参数)
public class SingleBusDetailSearchDto {

@ApiModelProperty(车辆vin码)
private String vin;

@ApiModelProperty(分公司)
private String branchCompany;

@ApiModelProperty(车队)
private String busTeam;

@ApiModelProperty(生产厂家)
private String oemName;

@ApiModelProperty(开始时间)
private String startTime;

@ApiModelProperty(结束时间)
private String endTime;

}
  • sql
<select id=getListByConditions resultType=com.ewsmp.module.carbonasset.vo.BusSingleEmissionVo>
select vin, data_time dataTime,
carbon_emission_day carbonEmissionDay, carbon_reduction_day carbonReductionDay,
carbon_emission_online carbonEmissionOnline, carbon_reduction_online carbonReductionOnline,
oem_name oemName, bus_team busTeam, branch_company branchCompany
from carbonasset_bus_single_emission
<where>
<if test=vin!=null and vin!=''> and vin = #{vin}</if>
<if test=branchCompany!=null and branchCompany!=''> and branch_company like concat('%', #{branchCompany}, '%')</if>
<if test=busTeam != null and busTeam !=''> AND bus_team = #{busTeam}</if>
<if test=oemName!=null and oemName!=''> and oem_name like concat('%', #{oemName}, '%')</if>

<if test=startTime != null and startTime !=''>AND data_time =toDate(#{startTime})</if>
<if test=endTime != null and endTime !=''>AND data_time =toDate(#{endTime})</if>
</where>
ORDER BY data_time DESC
</select>
  • 导出工具类
@Component
@Slf4j
public class ExcelUtil<T> {

/**
* 导出excle:支持选择导出指定字段
*
* @param exportList 要导出的数据
* @param clazz 要导出的实体类
* @param title 要导出的标题
* @param exportFields 要导出的字段集合:已逗号分隔
* @return
*/

public ModelAndView exportXls(List<T> exportList, Class<T> clazz, String title, String exportFields) {

LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
String realname = sysUser != null ? sysUser.getRealname() : ;

ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
mv.addObject(fileName, title);
mv.addObject(entity, clazz);
if (StringUtils.isNotEmpty(exportFields)) {
log.info(导出excle字段:{}, exportFields);
mv.addObject(NormalExcelConstants.EXPORT_FIELDS, exportFields);
}

ExportParams exportParams = new ExportParams(title + 报表, 导出人: + realname, title);
mv.addObject(params, exportParams);
mv.addObject(data, exportList);
return mv;
}
}

前端导出 Excel 的方式

这本来是后端的工作,前端只需要一个 a 标签,就可以下载文件,但不巧的是,正好遇到后端请假,而且项目比较着急,那么前端是否可以实现呢?

可以。

实现方式:

  • react-csv
  • xlsx 进入 xlsx 官网,官网称为 SheetJS,它支持浏览器、nodejs、deno、和 react-native,浏览器兼容 ie10+。

参考:https://juejin.cn/post/7114234898461753381

举报

相关推荐

0 条评论