EasyExcel的分类导出

文件下载

后端方面 接口如下

@RestController
@RequestMapping(value="/admin/product/category")
public class CategoryController {
      //导出
    @GetMapping("exportData")
    public void exportData(HttpServletResponse response) {
        categoryService.exportData(response);
    }
}

导出方法的实现

//导出
@Override
public void exportData(HttpServletResponse response) {
    try {
        //即我要用这样的方式导出
        //设置响应的头信息
        response.setContentType("application/vnd.ms-excel");//ms-excel微软中excel表格
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = URLEncoder.encode("分类数据", "UTF-8");
        
        
        //设置响应头    Content-disposition 让文件以下载格式下载
        response.setHeader("Content-disposition","attachment;filename="+ fileName + ".xlsx");
        
        
        //接下来写方法来查询数据并且导出
        //调用mapper方法查询所有的分类,返回list
        List<Category> categoryList = categoryMapper.findAll();
        //把Category 转换为 categoryExcelVoList
        //这里是因为我查询到的是Category类型  但是导出的是 CategoryExcelVo类型 需要转换
        List<CategoryExcelVo> categoryExcelVoList = new ArrayList<>();
        for (Category category:categoryList) {
            CategoryExcelVo categoryExcelVo = new CategoryExcelVo();
            //把category中的值 设置到categoryExcelVo里  工具类BeanUtils中的copyProperties方法可以直接转换
            BeanUtils.copyProperties(category,categoryExcelVo);
            categoryExcelVoList.add(categoryExcelVo);
        }
        
        
        //调用easyexcel的write方法完成
        EasyExcel.write(response.getOutputStream(), CategoryExcelVo.class).sheet().doWrite(categoryExcelVoList);
        
        
        
     }catch (Exception e){
            e.printStackTrace();
            throw new baimaxException(ResultCodeEnum.DATA_ERROR);
    }
}

其中查找数据库的sql语句如下

  
<!-- 用于select查询公用抽取的列 -->
    <sql id="columns">
        id,name,image_url,parent_id,status,order_num,create_time,update_time,is_deleted
    </sql>
​
<select id="findAll" resultMap="categoryMap">
    select <include refid="columns" />
    from category
    where is_deleted = 0
    order by id
</select>

前端中导入的接口

// 导出方法
export const ExportCategoryData = () => {
  return request({
   url: `${api_name}/exportData`,
   method: 'get',
   responseType: 'blob'  // // 这里指定响应类型为blob类型,二进制数据类型,用于表示大量的二进制数据
  })
 }

导出方法的前端

/导出方法
const exportData = () => {
 // 调用 ExportCategoryData() 方法获取导出数据
 ExportCategoryData().then(res => {
   // 创建 Blob 对象,用于包含二进制数据
   const blob = new Blob([res]);       
   // 创建 a 标签元素,并将 Blob 对象转换成 URL
   const link = document.createElement('a'); 
   link.href = window.URL.createObjectURL(blob);
   // 设置下载文件的名称
   link.download = '分类数据.xlsx';
   // 模拟点击下载链接
   link.click();
 })  
}

其中 绑定的方法是exportData

运行结果如下

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值