<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
<div id="printA">
  <!-- 表格1 -->
  <table>
    <tr><th>姓名</th><th>部门</th></tr>
    <tr><td>张三</td><td>技术部</td></tr>
  </table>
  
  <!-- 表格2 -->
  <table>
    <tr><th>项目</th><th>进度</th></tr>
    <tr><td>系统升级</td><td>50%</td></tr>
    <tr><td>安全审计</td><td>已完成</td></tr>
  </table>
</div>
<button onclick="exportAllToOneSheet()">合并导出</button>
<script>
function exportAllToOneSheet() {
  const div = document.getElementById('printA');
  const tables = div.getElementsByTagName('table');
  const wb = XLSX.utils.book_new();
  const ws = XLSX.utils.aoa_to_sheet([[]]); // 创建空工作表
  let currentRow = 0; // 当前写入行指针
  Array.from(tables).forEach((table, tableIndex) => {
    // 将表格转换为二维数组
    const tableData = XLSX.utils.sheet_to_json(
      XLSX.utils.table_to_sheet(table),
      { header: 1 }
    );
    // 添加表格间的分隔空行(第一个表格前不加)
    if (tableIndex > 0) {
      XLSX.utils.sheet_add_aoa(ws, [[""]], { origin: { r: currentRow, c: 0 } });
      currentRow++;
    }
    // 将表格数据写入工作表
    XLSX.utils.sheet_add_aoa(ws, tableData, {
      origin: { r: currentRow, c: 0 } // 从当前行开始写入
    });
    // 更新行指针(+数据行数)
    currentRow += tableData.length;
  });
  // 将工作表添加到工作簿
  XLSX.utils.book_append_sheet(wb, ws, "合并数据");
  // 生成并下载文件
  XLSX.writeFile(wb, 'combined_tables.xlsx');
}
</script>