riku
2025-08-13 bf42ef43fccdf3d3486eec84ad4073b0c7650aba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import * as XLSX from 'xlsx';
import FileSaver from 'file-saver';
 
function conversionFromTable(elementId, title) {
  // 获取表格元素
  let list = document.getElementById(elementId);
  let tables = list.cloneNode(true); //克隆此元素,否则更改数据时会影响到原表格
  //如果表格中含有switch开关,放入以下代码,可转换状态会在Excel中显示,否则转换出来为空,不会在Excel中显示
  // const rows = tables.getElementsByTagName('tr');
  // for (let i = 1; i < rows.length; i++) {
  //   // 从1开始,以跳过表头
  //   const cells = rows[i].getElementsByTagName('td');
  //   for (let j = 0; j < cells.length; j++) {
  //     const cell = cells[j];
  //     // 找到开关元素并获取状态
  //     const switchElement = cell.querySelector('input[type="checkbox"]');
  //     if (switchElement) {
  //       // 根据开关状态设置单元格内容
  //       cells[j].innerText = switchElement.checked ? '关闭' : '开启';
  //     }
  //   }
  // }
  // console.log(tables);
 
  //------放入以上拿到switch状态,以及下拉框代码,如果没克隆元素则会影响到原表格-------------//
 
  // 导出表格
  var xlsxParam = { raw: true }; // 导出的内容只做解析,不进行格式转换
  let table_book = XLSX.utils.table_to_book(tables, xlsxParam);
  const table_write = XLSX.write(table_book, {
    bookType: 'xlsx',
    bookSST: true,
    type: 'array'
  });
  try {
    FileSaver.saveAs(
      new Blob([table_write], { type: 'application/octet-stream' }),
      `${title}.xlsx` //修改名字
    );
    //这里可以放入你的回调函数
    alert('开始下载');
  } catch (e) {
    if (typeof console !== 'undefined') console.log(e, table_write);
  }
  return table_write;
}
 
export { conversionFromTable };