ExportExcel.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import XLSX from 'xlsx';
  2. import {ElMessage, ElMessageBox} from "element-plus";
  3. import {listIsBlank} from "./blank-utils";
  4. import XEUtils from "xe-utils";
  5. export function Export(json, fields, filename) {
  6. let temp = []
  7. XEUtils.arrayEach(json, (item) => {
  8. let tempData = {}
  9. for (let key in fields) {
  10. tempData[fields[key]] = item[key]
  11. }
  12. temp.push(tempData)
  13. })
  14. let sheetName = filename //excel的文件名称
  15. let wb = XLSX.utils.book_new() //工作簿对象包含一SheetNames数组,以及一个表对象映射表名称到表对象。XLSX.utils.book_new实用函数创建一个新的工作簿对象。
  16. let ws = XLSX.utils.json_to_sheet(temp, {header: Object.values(fields)}) //将JS对象数组转换为工作表。
  17. wb.SheetNames.push(sheetName)
  18. wb.Sheets[sheetName] = ws
  19. const defaultCellStyle = {
  20. font: {name: "Verdana", sz: 13, color: "FF00FF88"},
  21. fill: {fgColor: {rgb: "FFFFAA00"}}
  22. };//设置表格的样式
  23. let wopts = {
  24. bookType: 'xlsx',
  25. bookSST: false,
  26. type: 'binary',
  27. cellStyles: true,
  28. defaultCellStyle: defaultCellStyle,
  29. showGridLines: false
  30. } //写入的样式
  31. let wbout = XLSX.write(wb, wopts)
  32. let blob = new Blob([s2ab(wbout)], {type: 'application/octet-stream'})
  33. let link = document.createElement('a')
  34. link.href = window.URL.createObjectURL(blob)
  35. link.download = filename + '.xlsx'
  36. document.body.appendChild(link)
  37. link.click()
  38. document.body.removeChild(link)
  39. }
  40. export function ExcelName(json, fields) {
  41. if (listIsBlank(json)) {
  42. return ElMessage.error("没有可以导出的数据。")
  43. }
  44. ElMessageBox.prompt('请输入导出的文件名称。', '提示', {
  45. type: "warning",
  46. confirmButtonText: '确定',
  47. cancelButtonText: '取消',
  48. inputPattern: /\S/,
  49. inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',
  50. }).then(({value}) => {
  51. Export(json, fields, value)
  52. }).catch(() => {
  53. })
  54. }
  55. const s2ab = s => {
  56. let buf;
  57. let i;
  58. if (typeof ArrayBuffer !== 'undefined') {
  59. buf = new ArrayBuffer(s.length);
  60. const view = new Uint8Array(buf);
  61. for (i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff
  62. return buf
  63. } else {
  64. buf = new Array(s.length);
  65. for (i = 0; i !== s.length; ++i) buf[i] = s.charCodeAt(i) & 0xFF;
  66. return buf;
  67. }
  68. }