本来我是不想写这篇博文的,随着我技术的上升,已经很少有东西恶心我了,百度什么都能出来,但是百度出来的都是不能直接用的,所以我手写出来供我下次使用

后端

maven如下

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>easyexcel</artifactId>
	<version>2.2.8</version>
</dependency>

实体类


@Data
@TableName("sys_logininfor")
@ExcelIgnoreUnannotated
public class SysLogininfor implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * ID
     */
    @ExcelProperty(value = "序号")
    @TableId(value = "info_id", type= IdType.AUTO)
    private Long infoId;


    /**
     * 登录状态 0成功 1失败
     */
    @ExcelProperty(value = "登录状态", converter = ExcelDictConvert.class)
    @ExcelDictFormat(dictType = "sys_common_status")
    private String status;

    /**
     * 登录IP地址
     */
    @ExcelIgnore
    private String ipaddr;



    /**
     * 提示消息
     */
    @ExcelProperty(value = "提示消息")
    private String msg;


    /**
     * 请求参数
     */
    @TableField(exist = false)
    private Map<String, Object> params = new HashMap<>();

}

util 工具类

//导出接口
    public static <T> void export(HttpServletResponse response, Class<T> clazz, List<T> data, String fileName, String sheetName){
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("utf-8");
        try{
           fileName= new String((fileName + ExcelTypeEnum.XLSX.getValue()).getBytes(), StandardCharsets.ISO_8859_1);
            response.setHeader("Content-Disposition", "attachment; filename="+fileName);
            EasyExcelFactory.write(response.getOutputStream()).head(clazz).registerWriteHandler(new ExcelWidthStyleStrategy())
                .excelType(ExcelTypeEnum.XLSX)
                .sheet(sheetName).doWrite(data);
        }catch(IOException e){
            log.error("export excel error:",e);
        }
    }

controller 接口

    @PostMapping("/export")
    void export(JsonObject param,HttpServletResponse response){
        List<SysLogininfor> list = new ArrayList<>();
        String dateFormat = new DateTime().toString("yyyyMMddHHmmss");
        String fileName =dateFormat +"统计";
        export(response, SysLogininfor.class,list,fileName,"sheet1");
    }

前端:

js引入接口

export function export(data) {
	return request({
		url: "/export",
		method: post,
		data: data,
		responseType:'arraybuffer' ,
	})
}

vue调用

  this.loading=true
export({
  params: {
  }
}).then(response => {
  // 请求成功返回后,获取到Excel文件的二进制数据
  const blob = new Blob([response.data], { type: 'application/vnd.ms-excel' });
  // 创建下载链接
  const downloadUrl = URL.createObjectURL(blob);
  // 创建一个隐藏的a标签,设置下载链接和文件名,模拟点击下载
  const link = document.createElement('a');
  link.style.display = 'none';
  link.href = downloadUrl;
  link.download = '统计.xlsx';
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
  this.loading=false
}).catch(error => {
  // 请求失败处理
  console.error(error);
});

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部