前端实现本地导出

11 阅读1分钟
//excal导出(全部导出)
/**
 *
 * @param dataSource   表格的数据源
 * @param columns      表格的标题栏
 * @param filename      导出的excal文件名称
 * @constructor
 */
function ExportExcelButton (dataSource,columns,filename ){
  // 去除序号栏
  let indexNum = columns.findIndex((item)=>{
    return item.title == '序号'
  })
  if(indexNum>=0){
    columns = columns.filter((item)=>{
      return item.title !== '序号'
    })
  }
  //去除操作栏
  let indexAction = columns.findIndex((item)=>{
    return item.title == '操作'
  });
  if(indexAction >= 0){
    columns = columns.filter((item)=>{
      return item.title !== '操作'
    })
  }
  let data1 = transData(columns, dataSource)
  let ws = XLSX.utils.aoa_to_sheet(data1);
  let wb = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(wb, ws, 'Sheet1');
  XLSX.writeFile(wb,  `${filename}.xlsx`)
}
//数据结果处理
function transData(columns, tableList) {
  const obj = columns.reduce((acc, cur) => {
    if (!acc.titles && !acc.keys) {
      acc.titles = [];
      acc.keys = [];
    }
    acc.titles.push(cur.title);
    acc.keys.push(cur.dataIndex);
    return acc;
  }, {});
  const tableBody = tableList.map(item => {
    return obj.keys.map(key => item[key]);
  });
  // tableBody.forEach((el,index)=>{
  //   el[0] = index+1;
  // })
  // console.log(tableBody)
  return [ obj.titles, ...tableBody ];
}
export {ExportExcelButton}