前端实现一个导出表格的功能

本文介绍了前端如何实现导出表格功能,包括前端导出的步骤,如调用后台接口和处理数据,以及后端导出接口的实现,强调了处理乱码的重要性。建议在数据量小的情况下使用前端导出,否则推荐后端导出以保证效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前端实现一个导出表格的功能


前言

导出一般是属于后端的功能,前端只负责下载,因为当数据更多更复杂时前端导出会卡顿,后端更快。

一、前端导出

1.调用后台的page接口组装数据
//导出问题反馈记录

function exportExcel() {
  let paramter = {
    current: 1,
    size: 3000
  };
  getPageApi(Object.assign(data.query, paramter)).then(
    response => {
      let exportList: { [propName: string]: any }[] = response.data.records;
      exportList.forEach(el => {
        el.fbType = getLabelByValue(fbTypeOption, el.fbType); //此处时处理label和value的函数
        el.status = getLabelByValue(statusOption, el.status);
      });
      const viewModel = { projects: exportList };
      renderExcel(
        "./excel/table/template.xlsx", //文件路径
        viewModel, //数据
        "问题记录"  //表格名称
      );
    }
  );
}

2. 导入的文件一般放在public目录下
我这里在public中建了一个文件夹excel
3.导入模板的格式
在这里插入图片描述
第一行时表格名称;第二行时表格字段必须按格式写 ##project.deviceCode;后面的带上。

二、后端导出

1.调用后台的导出接口

async function exportDevice(params: PageParams) {
  await getDataForExportExcelApi(
    Object.assign(data.query, params, { size: 3000 })
  )
    .then(response => {
      // 创建a标签
      let aLabel = document.createElement("a");
      aLabel.setAttribute(
        "href",
        URL.createObjectURL(
          new Blob([response], { type: "application/x-excel" })
        )
      );
      aLabel.setAttribute("download", "device.xlsx");
      aLabel.click();
    })
    .catch(err => {
      console.error(err);
    });
}

2.处理乱码

(1)注意excel是二进制的文件,接口需要特殊处理
excel,word,图片等需要这样处理

const requestImageConfig: PureHttpRequestConfig = {
  beforeRequestCallback: request => {
    request.responseType = "blob"; //需要设置文件的响应类型为blob
    // request.timeout = 30000;
    request.headers["token"] = $token;
  }
};

(2)接口定义

export const getForExportExcelApi = (
  params: PageParams
): Promise<any> => {
  return http.request(
    "get",
    "/admin/lot-dev/pageForExportExcel",
    { params },
    requestImageConfig
  );
};

总结

导出excel是很常用的功能,尽量后端实现导出,如果表格很规范,而且数据量和字段量比较少,前端的方法也可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值