简单使用XLSX 生成 excel

631 阅读1分钟
import XLSX from "xlsx";

export const ArrayToExcel = function(arr) {
/*
*接受一个由 JS 值组成的数组,并返回一个类似于输入数据的工作表。
数字、布尔值和字符串被存储为相应的样式。日期存储为日期或数字。
跳过数组孔和显式的未定义值。空值可以被存根。所有其他值都存储为字符串。这个函数接受一个选项参数:
*/
  var sheet = XLSX.utils.aoa_to_sheet(arr);
  return URL.createObjectURL(sheet2blob(sheet));
};

function sheet2blob(sheet, sheetName) {
  sheetName = sheetName || "sheet1";
  var workbook = {
    SheetNames: [sheetName],
    Sheets: {}
  };
  workbook.Sheets[sheetName] = sheet;
  // 生成excel的配置项
  var wopts = {
    bookType: "xlsx", // 要生成的文件类型
    bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
    type: "binary"
  };
  var wbout = XLSX.write(workbook, wopts);
  var blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" });
  // 字符串转ArrayBuffer
  function s2ab(s) {
    var buf = new ArrayBuffer(s.length);
    var view = new Uint8Array(buf);
    for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
    return buf;
  }
  return blob;
}

try {
  downloadByUrl(ArrayToExcel(extArr), `工单${date}.xlsx`);
  } catch (error) {} 
  
  // 通过a标签下载
  export function downloadByUrl(url, name) {
  try {
    const elt = document.createElement("a");
    elt.setAttribute("href", url);
    elt.setAttribute("download", name);
    elt.style.display = "none";
    document.body.appendChild(elt);
    elt.click();
    document.body.removeChild(elt);
  } catch (error) {
    console.log(error);
  }
}


前端使用SheetJS的xlsx.js实现excel表格生成 SheetJS的xlsx.js简介