如何将Excel文件导出为其他格式?

2026-04-12 13:533阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1032个文字,预计阅读时间需要5分钟。

如何将Excel文件导出为其他格式?

使用Excel导出——基于Apache POI工具类的封装,主要依赖于Apache JSON包,以及表格处理的POI包。因此,我们需要导入这两个库的依赖包,另外,还需要文件上传的相关包。最终,我们在浏览器上实现导出功能。

Excel导出——POI

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

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

Excel导出——EasyExcel

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

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

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

其它

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 &gt;=toDate(#{startTime})</if> <if test="endTime != null and endTime !=''">AND data_time &lt;=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+。

参考:juejin.cn/post/7114234898461753381

如何将Excel文件导出为其他格式?

本文共计1032个文字,预计阅读时间需要5分钟。

如何将Excel文件导出为其他格式?

使用Excel导出——基于Apache POI工具类的封装,主要依赖于Apache JSON包,以及表格处理的POI包。因此,我们需要导入这两个库的依赖包,另外,还需要文件上传的相关包。最终,我们在浏览器上实现导出功能。

Excel导出——POI

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

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

Excel导出——EasyExcel

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

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

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

其它

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 &gt;=toDate(#{startTime})</if> <if test="endTime != null and endTime !=''">AND data_time &lt;=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+。

参考:juejin.cn/post/7114234898461753381

如何将Excel文件导出为其他格式?