javascript 导出数据到Excel(处理table中的元素)

yizhihongxing

下面是详细讲解“javascript 导出数据到Excel(处理table中的元素)”的完整攻略,过程中将包含两个示例说明。

1. 简介

在 web 开发中,有时需要将 table 数据导出为 Excel 文件。本文将介绍如何使用纯 javascript 处理 table 中的元素,并将 table 数据导出为 Excel 文件。

2. 代码实现

首先,我们需要编写一个 javascript 函数来遍历 table,并将 table 的每一行数据转为 Excel 里的一行数据。以下是示例代码:

function tableToExcel(tableId, fileName) {
    var table = document.getElementById(tableId);
    var rows = table.getElementsByTagName("tr");
    var arrContent = [];

    for (var i = 0; i < rows.length; i++) {
        var row = rows[i];
        var cells = row.getElementsByTagName("td");
        var arrRow = [];

        for (var j = 0; j < cells.length; j++) {
            var cell = cells[j];
            arrRow.push(cell.innerHTML);
        }

        arrContent.push(arrRow.join(","));
    }

    var csvContent = "data:text/csv;charset=utf-8," + arrContent.join("\n");
    var encodedUri = encodeURI(csvContent);
    var link = document.createElement("a");
    link.setAttribute("href", encodedUri);
    link.setAttribute("download", fileName + ".csv");
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

该函数接收两个参数:一个 table 的标识符和要导出的文件名。下面是函数实现的详细步骤:

  • 首先,获取 table 元素以及所有行和单元格的列表。
  • 接着,遍历所有行并创建一个新的数组来保存每一行单元格的数据。
  • 在遍历单元格时,将每个单元格的内容推入行数组中。
  • 将每行数据作为一段逗号分隔的文本行保存到 arrContent 数组中。
  • 将 arrContent 数组转换为逗号分隔的文本字符串 csvContent。
  • 将 csvContent 编码为 URI 并将其分配给链接的 href 属性。
  • 将文件名分配给链接的 download 属性。
  • 将链接添加到文档中、触发点击事件并从文档中删除该链接。

3. 示例

下面是两个示例,演示如何使用该函数将 table 导出为 Excel 文件。

示例 1:导出所有 table

HTML 代码:

<table id="table1">
    <thead>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>年龄</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>张三</td>
            <td>25</td>
        </tr>
        <tr>
            <td>2</td>
            <td>李四</td>
            <td>30</td>
        </tr>
    </tbody>
</table>
<br>
<table id="table2">
    <thead>
        <tr>
            <th>编号</th>
            <th>性别</th>
            <th>邮箱</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>女</td>
            <td>abc@123.com</td>
        </tr>
        <tr>
            <td>2</td>
            <td>男</td>
            <td>def@456.com</td>
        </tr>
    </tbody>
</table>
<br>
<button onclick="tableToExcel('table1','table1')">导出table1</button>
<button onclick="tableToExcel('table2','table2')">导出table2</button>

javascript 代码:

function tableToExcel(tableId, fileName) {
    var table = document.getElementById(tableId);
    var rows = table.getElementsByTagName("tr");
    var arrContent = [];

    for (var i = 0; i < rows.length; i++) {
        var row = rows[i];
        var cells = row.getElementsByTagName("td");
        var arrRow = [];

        for (var j = 0; j < cells.length; j++) {
            var cell = cells[j];
            arrRow.push(cell.innerHTML);
        }

        arrContent.push(arrRow.join(","));
    }

    var csvContent = "data:text/csv;charset=utf-8," + arrContent.join("\n");
    var encodedUri = encodeURI(csvContent);
    var link = document.createElement("a");
    link.setAttribute("href", encodedUri);
    link.setAttribute("download", fileName + ".csv");
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

在这个示例中,我们创建了两个 table,并为每个 table 添加了导出按钮。当用户单击导出按钮时,将调用 tableToExcel 函数并导出对应的 table。

示例 2:导出指定列

HTML 代码:

<table id="table3">
    <thead>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>总分</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>张三</td>
            <td>25</td>
            <td>80</td>
        </tr>
        <tr>
            <td>2</td>
            <td>李四</td>
            <td>30</td>
            <td>90</td>
        </tr>
    </tbody>
</table>
<br>
<button onclick="tableToExcel('table3','table3', [0,2])">导出table3的编号和年龄</button>

javascript 代码:

function tableToExcel(tableId, fileName, cols) {
    var table = document.getElementById(tableId);
    var rows = table.getElementsByTagName("tr");
    var arrContent = [];
    var cells = null;

    for (var i = 0; i < rows.length; i++) {
        var row = rows[i];
        if (i == 0) {
            cells = row.getElementsByTagName("th");
        } else {
            cells = row.getElementsByTagName("td");
        }
        var arrRow = [];

        for (var j = 0; j < cols.length; j++) {
            var colIndex = cols[j];
            var cell = cells[colIndex];
            arrRow.push(cell.innerHTML);
        }

        arrContent.push(arrRow.join(","));
    }

    var csvContent = "data:text/csv;charset=utf-8," + arrContent.join("\n");
    var encodedUri = encodeURI(csvContent);
    var link = document.createElement("a");
    link.setAttribute("href", encodedUri);
    link.setAttribute("download", fileName + ".csv");
    document.body.appendChild(link);
    link.click();
    document.body.removeChild(link);
}

在这个示例中,我们为 table3 只想导出编号和年龄两列的内容。因此,调用 tableToExcel 函数时,我们传递一个数组 [0,2],只将第 0 列和第 2 列的值添加到导出文件中。

4. 总结

本文介绍了如何使用 javascript 将 table 中的数据导出到 Excel 文件。我们讲解了实现的过程,并提供了两个示例来帮助你更深入了解该函数的应用。希望本文对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript 导出数据到Excel(处理table中的元素) - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue的Eslint配置文件eslintrc.js说明与规则介绍

    Vue的Eslint配置文件(eslintrc.js)是用来规范Vue项目代码风格和优化代码质量的重要配置文件。本文将详细讲解该配置文件的说明和规则介绍,包括ESLint的安装、配置文件的基本配置、插件的安装和规则的介绍。 ESLint安装 要使用ESLint,首先需要在项目中安装ESLint模块,可以使用npm或yarn进行安装。 npm install …

    Vue 2023年5月28日
    00
  • Vue渲染器设计实现流程详细讲解

    让我来详细讲解一下“Vue渲染器设计实现流程详细讲解”的完整攻略。 1. 简介 在Vue.js中,渲染器是将组件转换为DOM元素的核心部分。渲染器将Vue组件转化为一个虚拟DOM树(VNode)并将其渲染到实际的DOM树中。 Vue渲染器主要分为三个部分:模板编译器、虚拟DOM和实际DOM的渲染器。下面我们分别来看这三个部分的功能和实现过程。 2. 模板编译…

    Vue 2023年5月27日
    00
  • 解决Element中el-date-picker组件不回填的情况

    问题背景:Element UI 中 el-date-picker 组件在使用时有可能出现选择日期后无法回填的情况,即选择的日期无法正确显示在输入框中。这种情况出现的原因是由于用户未绑定 v-model 或者 v-model 绑定的变量内容不正确导致。 解决方案:由于该问题可能是由多方面问题引起的,此文将从以下几个方面详细讲解如何解决这个问题。 确认 v-mo…

    Vue 2023年5月29日
    00
  • Vue项目中跨域问题解决方案

    Vue项目中跨域问题解决方案的完整攻略一般可以分为以下几个步骤: 第一步:了解跨域问题 跨域问题是指在同一页面中访问不同域名或端口的资源时所遇到的限制。原因在于浏览器出于安全考虑,防止恶意网站进行访问和篡改。 第二步:确定跨域请求的场景 在Vue项目中,跨域请求一般出现在以下几个场景: 前端(Vue项目)请求后端的API接口 前端发送Ajax请求 前端使用w…

    Vue 2023年5月28日
    00
  • vue使用ajax获取后台数据进行显示的示例

    使用 Vue.js 进行前端开发时,常常需要从后端获取数据,并将其显示在页面上。其中一个常用的方式是通过 Ajax 技术向后端服务器发送 HTTP 请求,在得到响应后在前端页面上进行展示。下面是使用 Vue.js 实现向后端服务器发送 Ajax 请求并将其返回结果显示在页面上的示例攻略。 1. 在 Vue.js 中使用 Ajax Vue.js 提供了内置的 …

    Vue 2023年5月28日
    00
  • Shell脚本编写Nagios插件监控程序资源占用

    Shell脚本编写Nagios插件监控程序资源占用 1. Nagios插件介绍 Nagios是一款开源的网络监控系统,可以实时监控服务器、网络、应用等各种资源。Nagios插件是一种用于对指定资源进行监控的程序。本文将介绍如何编写Nagios插件,对程序资源占用进行监控。 2. 编写Shell脚本 我们可以利用Shell脚本来编写Nagios插件,以监控程序…

    Vue 2023年5月28日
    00
  • 深度解析 Vue3 的响应式机制

    深度解析 Vue3 的响应式机制 Vue3 的响应式机制借鉴了 ES6 中的 Proxy,相较于 Vue2 中的 Object.defineProperty,其实现更加高效灵活。下面将详细介绍 Vue3 的响应式机制及其实现原理。 Vue3 的响应式机制 Vue3 中的响应式机制是通过 reactivity 模块来实现的,它主要包括以下几个部分: react…

    Vue 2023年5月27日
    00
  • mpvue全局引入sass文件的方法步骤

    下面我详细讲解在mpvue中全局引入sass文件的方法。 在mpvue中全局引入sass文件的方法步骤 步骤如下: 安装sass-loader和node-sass模块: npm i sass-loader node-sass -D 在 build/webpack.base.conf.js 中添加sass-loader配置: // build/webpack.…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部