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

下面是详细讲解“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日

相关文章

  • JS实现的tab切换选项卡效果示例

    JS实现的tab切换选项卡效果是一种非常实用的UI交互实现方式,下面我来详细讲解一下这个效果的完整攻略。 准备工作 在实现这个效果之前,需要准备好以下几个内容: HTML结构 tab切换选项卡是基于HTML结构进行实现的,所以需要先准备好选项卡的基本HTML结构。一般来说,一个基本选项卡的HTML结构可能是这样的: <div class="t…

    Vue 2023年5月28日
    00
  • vue自动添加浏览器兼容前后缀操作

    下面是关于vue自动添加浏览器兼容前后缀的完整攻略。 什么是浏览器兼容前后缀? 浏览器兼容前后缀是指在某些浏览器中,可能对某些 CSS 属性所使用的某些值不兼容,需要在其前后添加特定的前缀,即在CSS样式中写入以下内容: -moz- /*火狐*/ -webkit- /*chrome、safari*/ -ms- /*IE浏览器*/ -o- /*Opera浏览器…

    Vue 2023年5月28日
    00
  • 关于VueRouter导入的全过程

    VueRouter是Vue.js官方提供的路由管理插件,可以帮助我们快速搭建单页应用,提供了基于Vue.js的路由机制。下面是关于VueRouter导入的全过程的详细攻略: 安装VueRouter 使用Vue.js框架中的VueRouter前,需要先安装VueRouter。在命令行中使用以下命令安装: npm install vue-router –sav…

    Vue 2023年5月28日
    00
  • vue中如何给静态资源增加路由前缀

    在 Vue 中,我们通常将静态资源放在 public 目录下,这些静态资源可以是样式表、脚本、图片、字体等文件。在访问这些静态资源时,我们可以给它们增加路由前缀,以便更好地管理和部署我们的应用程序。 一种实现方式是通过修改 vue.config.js 文件,该文件是 Vue CLI 3.x 新增的配置文件,用于存放项目构建配置。我们可以在 publicPat…

    Vue 2023年5月28日
    00
  • vue.js实现三级菜单效果

    当使用vue.js框架时,实现三级菜单效果需要多个步骤。以下是其中的几个关键步骤: 步骤一:定义Vue实例中的数据结构 定义一个vue实例,包含一个数组,数组每个元素表示一个菜单项,该数组每个元素还包含以下属性: id:唯一标识该菜单项,每个菜单项的id值必须唯一。 name:表示该菜单项的名称。 children:表示该菜单项包含的子菜单,该属性的值同样是…

    Vue 2023年5月28日
    00
  • Vuex详细介绍和使用方法

    Vuex是Vue.js框架中的一个状态管理工具,用于在Vue组件之间进行状态共享。它采用了单一数据源的概念,在全局维护了一个store对象,实现了统一状态的管理和维护。 Vuex的基础概念 State 在Vuex中,状态是唯一的数据源,在前端开发中,我们经常需要在不同的组件中使用相同的状态,为了保证状态的一致性和可控性,我们将其放置在store对象中,即状态…

    Vue 2023年5月27日
    00
  • vue中对象的赋值Object.assign({}, row)方式

    在Vue中,我们经常需要对对象进行赋值。而Object.assign()是一个常用的对象赋值操作,尤其常用于实现浅拷贝。在Vue中,我们可以使用Object.assign({}, row)来实现浅拷贝,将row对象的所有属性和方法赋值给一个空对象。 以下是Object.assign()的基本语法: Object.assign(target, source1,…

    Vue 2023年5月28日
    00
  • vue源码学习之Object.defineProperty 对数组监听

    下面我来为您介绍一下“Vue源码学习之Object.defineProperty对数组监听”的攻略。 1. Object.defineProperty的基本用法 首先,我们来了解一下Object.defineProperty的基本用法及其作用。 Object.defineProperty是ES5新增的一个API,它可以用来精确添加或修改对象的属性。该方法将直…

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