xlsx使用table_to_book报错Uncaught Unsupported origin when DIV is not a TABLE

背景:const workbook = XLSX.utils.table_to_book(document.querySelector('#table-export'),{

raw: true//保留原始字符串

})报错Uncaught Unsupported origin when DIV is not a TABLE

原因:el-table是div格式

过程1:获取深层次的table,但是只获取到了表头数据

javascript 复制代码
const workbook = XLSX.utils.table_to_book(document.querySelector('#table-export').getElementsByTagName("TABLE")[0],{
    raw: true//保留原始字符串
})

过程2:遍历table,但是表头和表体分开在了两个sheet中

javascript 复制代码
const table = document.querySelector('#table-export') as HTMLTableElement;
  var wb = XLSX.utils.book_new();
  var children = table.getElementsByTagName("TABLE");
  for (var i = 0; i < children.length; ++i) {
    var ws = XLSX.utils.table_to_sheet(children[i]);
    XLSX.utils.book_append_sheet(wb, ws, "Sheet" + (i + 1));
  }

过程3: 使用table_to_sheet再用sheet_to_json,将json对象用concat拼接,最后json_to_sheet放到一个sheet中。但是由于有合并单元格,在sheet_to_json过程中格式乱掉了

解决:考虑在table_to_sheet之前,先将table的thead和tbody进行拼接,形成一个完整的table

javascript 复制代码
// 导出为 Excel
const exportMergedCellsToExcel = () => {
  const table = document.querySelector('#table-export') as HTMLTableElement;
  // 创建一个新的工作簿
  let wb = XLSX.utils.book_new();
  // 获取表格的表头table
  let tableHead = table.getElementsByTagName("TABLE")[0]
  // 获取表格的表体
  let tableBody = table.getElementsByTagName("TABLE")[1].getElementsByTagName("TBODY")[0]
  // 将表体添加到表头table中
  tableHead.appendChild(tableBody)
  // 创建一个新的工作表
  let ws = XLSX.utils.table_to_sheet(tableHead);
  // 将工作表添加到工作簿
  XLSX.utils.book_append_sheet(wb, ws, "Sheet1");
  // 将工作簿保存为 Excel 文件
  XLSX.writeFile(wb, '总分均分统计.xlsx');
};
相关推荐
gnip27 分钟前
企业级配置式表单组件封装
前端·javascript·vue.js
一只叫煤球的猫1 小时前
写代码很6,面试秒变菜鸟?不卖课,面试官视角走心探讨
前端·后端·面试
excel2 小时前
Three.js 材质(Material)详解 —— 区别、原理、场景与示例
前端
掘金安东尼3 小时前
抛弃自定义模态框:原生Dialog的实力
前端·javascript·github
hj5914_前端新手6 小时前
javascript基础- 函数中 this 指向、call、apply、bind
前端·javascript
薛定谔的算法6 小时前
低代码编辑器项目设计与实现:以JSON为核心的数据驱动架构
前端·react.js·前端框架
Hilaku7 小时前
都2025年了,我们还有必要为了兼容性,去写那么多polyfill吗?
前端·javascript·css
yangcode7 小时前
iOS 苹果内购 Storekit 2
前端
LuckySusu7 小时前
【js篇】JavaScript 原型修改 vs 重写:深入理解 constructor的指向问题
前端·javascript
LuckySusu7 小时前
【js篇】如何准确获取对象自身的属性?hasOwnProperty深度解析
前端·javascript