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');
};
相关推荐
胡萝卜术9 小时前
从API调用到手写LRU:力扣146「LRU缓存」的哈希表+双向链表终极进化之路
前端·javascript·面试
科技道人9 小时前
记录 默认置灰/禁用 app ‘Search Engine Selector‘ 的disable按钮
开发语言·前端·javascript
天疆说9 小时前
Zotero Connector 在 Edge 里找不到桌面 Zotero(Linux / Zotero 9.0.6 / Edge 150)
linux·前端·edge
李伟_Li慢慢11 小时前
02-从硬件说起WebGL
前端·three.js
kyriewen12 小时前
看了微软几万人用AI编程的数据——效率涨24%的代价没人提
前端·ai编程·claude
2601_9637713712 小时前
How to Scale Your WordPress Store Traffic in 2026
前端·php·plugin
亿元程序员12 小时前
老板说我的3D箭头游戏用来做试玩太普通了,没人想玩,让我变点花样...
前端
李伟_Li慢慢13 小时前
01-threejs架构原理-课程简介
前端·three.js
_瑞14 小时前
深入理解 iOS 渲染原理
前端·ios
IT_陈寒14 小时前
SpringBoot自动配置失灵?你可能忘了这个关键注解
前端·人工智能·后端