html 导出页面数据至表格Excel

简介:

        将html中的表格下载下来,使用js组件:xlsx.full.min.js

完整示例:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>导出表格到 Excel 文件</title>
  </head>
  <body>
    <table id="myTable">
      <thead>
        <tr>
          <th>姓名</th>
          <th>年龄</th>
          <th>分数</th>
          <th>分数2</th>
          <th>分数3</th>
          <th>分数4</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>张三</td>
          <td>20</td>
          <td>88.5</td>
          <td>5292.55999999999556</td>
          <td>174.57999999999998</td>
        </tr>
        <tr>
          <td>李四</td>
          <td>21</td>
          <td>92.0</td>
		  <td>5292.55999999999557</td>
		  <td>0601012023041453</td>
        </tr>
        <tr>
          <td>王五</td>
          <td>22</td>
          <td>85.5</td>
		  <td>5292.55999999999558</td>
		  <td>1098556414760812544</td>
        </tr>
      </tbody>
    </table>

    <button onclick="exportToExcel('myTable', [], [])">导出 Excel</button>

    <script src="https://cdn.bootcdn.net/ajax/libs/xlsx/0.16.9/xlsx.full.min.js"></script>
    <script>
      function exportToExcel(tableId, excludeRows, excludeColumns) {
		  debugger;
        // 获取表格
        var table = document.getElementById(tableId);

        // 获取表头和数据行
        var thead = table.querySelector('thead');
        var tbody = table.querySelector('tbody');

        // 获取表头中的列名
        var columns = [];
        var ths = thead.querySelectorAll('th');
        for (var i = 0; i < ths.length; i++) {
          columns.push(ths[i].textContent);
        }

        // 获取数据行中的单元格数据
        var data = [];
        var trs = tbody.querySelectorAll('tr');
        for (var i = 0; i < trs.length; i++) {
          var tds = trs[i].querySelectorAll('td');
          var row = [];
          for (var j = 0; j < tds.length; j++) {
            row.push(tds[j].textContent);
          }
          data.push(row);
        }

        // 排除指定的行和列
        for (var i = excludeRows.length - 1; i >= 0; i--) {
          data.splice(excludeRows[i], 1);
        }
        for (var i = excludeColumns.length - 1; i >= 0; i--) {
          columns.splice(excludeColumns[i], 1);
          for (var j = 0; j < data.length; j++) {
            data[j].splice(excludeColumns[i], 1);
          }
        }

        // 创建一个工作簿
        var workbook = XLSX.utils.book_new();

        // 创建一个工作表
        var worksheet = XLSX.utils.aoa_to_sheet([columns].concat(data));

        // 将单元格格式设置为文本
        var range = XLSX.utils.decode_range(worksheet['!ref']);
        for (var R = range.s.r; R <= range.e.r; ++R) {
          for (var C = range.s.c; C <= range.e.c; ++C) {
            var cellAddress = { c: C, r: R };
            var cell = worksheet[XLSX.utils.encode_cell(cellAddress)];
			// if(cell.z!=undefined){
				try{
					if (!cell || !cell.s) continue;
					    cell.s.border = {
					      top: { style: 'thin', color: { rgb: '000000' } },
					      bottom: { style: 'thin', color: { rgb: '000000' } },
					      left: { style: 'thin', color: { rgb: '000000' } },
					      right: { style: 'thin', color: { rgb: '000000' } }
					    };
				}catch(e){
					//TODO handle the exception
				}
				try{
					cell.z = '@';
				}catch(e){
					//TODO handle the exception
				}
			// }
          }
        }

        // 将工作表添加到工作簿
        XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');

        // 将工作簿导出为 XLSX 文件
        var wbout = XLSX.write(workbook, { bookType: 'xlsx', type: 'binary' });

        // 将二进制数据转换为 Blob 对象
        var blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' });

        // 下载文件
        var link = document.createElement('a');
        link.href = window.URL.createObjectURL(blob);
        link.download = 'export.xlsx';
        document.body.appendChild(link);
        link.click();
      }

      // 将字符串转换为 ArrayBuffer 对象
      function s2ab(s) {
        var buf = new ArrayBuffer(s.length);
        var view = new Uint8Array(buf);
        for (var i = 0; i < s.length; i++) {
          view[i] = s.charCodeAt(i) & 0xff;
        }
        return buf;
      }
    </script>
  </body>
</html>

xlsx.full.min.js:

好的,您可以使用以下步骤实现这个功能: 1. 在使用 Echarts 绘制图表时,将图表的数据保存在一个 state 。 2. 创建一个按钮组件,使用 React 的 useState 钩子来创建一个状态变量,用于控制按钮点击事件。 3. 在按钮的点击事件,使用 FileSaver.js 库将图表数据导出到 Word 文档。 4. 将导出按钮组件和 Echarts 组件一起渲染,以便用户可以点击按钮导出数据。 下面是一个简单的代码示例: ```jsx import React, { useState } from 'react'; import ReactEcharts from 'echarts-for-react'; import * as FileSaver from 'file-saver'; const MyEcharts = () => { const [chartData, setChartData] = useState(null); const [exporting, setExporting] = useState(false); const handleExportClick = () => { setExporting(true); const chartDataStr = JSON.stringify(chartData); const blob = new Blob([chartDataStr], { type: 'application/json' }); FileSaver.saveAs(blob, 'chart-data.json'); setExporting(false); }; const options = { // Echarts 配置项 }; return ( <> <ReactEcharts option={options} onChartReady={e => setChartData(e.getOption())} /> <button disabled={exporting} onClick={handleExportClick}> {exporting ? 'Exporting...' : 'Export to Word'} </button> </> ); }; ``` 在这个示例,我们使用了 ReactEcharts 组件来绘制图表,并使用 onChartReady 回调将图表数据保存到 state 。然后,我们创建了一个按钮组件,并在点击事件使用 FileSaver.js 库将图表数据导出到 Word 文档。最后,我们将导出按钮组件和 Echarts 组件一起渲染,以便用户可以点击按钮导出数据
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值