javascript导出csv文件(excel)的方法示例

下面是关于“javascript导出csv文件(excel)的方法示例”的完整攻略:

一、CSV文件格式介绍

CSV(Comma-Separated Values)就是指逗号分隔符,通常是一种保存矩阵数据的文件格式。每行记录表示一行,以逗号作为分隔符,不同列数据存在不同位置,可以通过表格对齐的方式方便地分辨出来。

例如:下面是一个CSV文件的模板:

姓名,学号,成绩
小明,201701,98
小红,201702,95
小丽,201703,100

在具体导出CSV文件时,我们需要通过JavaScript来创建并下载这个文件。

二、创建CSV文件内容

首先,我们需要准备好我们要导出的数据,可以是数组、JSON格式等。以一个数组为例,它长这样:

let data = [
  ['姓名', '学号', '成绩'],
  ['小明', '201701', '98'],
  ['小红', '201702', '95'],
  ['小丽', '201703', '100']
];

可以看到,这个数组就是符合CSV格式的。接下来,我们需要将它转换为符合CSV格式的字符串。

三、将数据转换为CSV格式的字符串

我们可以通过循环遍历数据,将数组中的每一个元素用逗号隔开,并且每行最后再加上一个换行符,最后将这些字符串累加起来,以形成一个文本字符串。这个过程可以使用以下代码完成:

let csvContent = '';
data.forEach(function(rowArray) {
  let row = rowArray.join(',');
  csvContent += row + '\r\n';
});

这里用到了join()方法将数组中每一项用逗号隔开,forEach()方法遍历整个数组,csvContent是保存最终文本的变量。

四、下载CSV文件

最后一步是将数据下载为CSV文件。这个过程需要使用到一个伪造的<a>标签来实现。具体流程为:

  1. 我们需要先创建一个Blob对象,它代表了一份二进制数据(通常是一个文件),并设置这个对象的typetext/csv,表示文本内容的MIME类型为CSV格式。
let blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
  1. 创建一个伪造的链接标签,将这个Blob对象下载为一个CSV文件。
let link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = '学生成绩单.csv';
link.style.display = 'none';
document.body.appendChild(link);
link.click();

URL.createObjectURL(blob)创建一个地址,将这个地址作为href属性值,link.download表示在下载时会下载一个名为“学生成绩单.csv”的文件,link.style.display = 'none'表示这个链接在页面上是隐藏起来的,最后使用link.click()方法自动触发下载过程。

五、完整示例

下面是一个完整的示例代码,包括了准备数据、转换数据、下载文件等步骤:

let data = [
  ['姓名', '学号', '成绩'],
  ['小明', '201701', '98'],
  ['小红', '201702', '95'],
  ['小丽', '201703', '100']
];

let csvContent = '';
data.forEach(function(rowArray) {
  let row = rowArray.join(',');
  csvContent += row + '\r\n';
});

let blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });

let link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = '学生成绩单.csv';
link.style.display = 'none';
document.body.appendChild(link);
link.click();

六、示例说明

下面我们将介绍两个基于上述代码的示例,来说明如何使用它来导出不同格式的CSV文件。

示例1:通过JSON数据导出CSV文件

以下是一个以JSON格式表示的数据:

let data = [
  { name: '小明', student_id: '201701', score: 98 },
  { name: '小红', student_id: '201702', score: 95 },
  { name: '小丽', student_id: '201703', score: 100 }
];

首先,我们需要将JSON数据转换成符合CSV格式的二维数组,代码如下:

let data = [
  ['姓名', '学号', '成绩'],
  ...(function() {
    let arr = [];
    data.forEach(function(item) {
      arr.push([item.name, item.student_id, item.score]);
    });
    return arr;
  })()
];

这里使用了扩展运算符...将第一行的中文标题与后面的数据数组合并。forEach()遍历整个JSON数据,将每个数据项转换成一个数组。

接下来就可以按照上面的流程使用这个数组来生成CSV文件。

示例2:将HTML表格转换为CSV文件

以下是一个HTML表格:

<table>
  <tr>
    <th>姓名</th>
    <th>学号</th>
    <th>成绩</th>
  </tr>
  <tr>
    <td>小明</td>
    <td>201701</td>
    <td>98</td>
  </tr>
  <tr>
    <td>小红</td>
    <td>201702</td>
    <td>95</td>
  </tr>
  <tr>
    <td>小丽</td>
    <td>201703</td>
    <td>100</td>
  </tr>
</table>

我们可以使用document.querySelectorAll()方法获取这个表格的所有<tr>元素,然后遍历每个元素的子元素<td>,将其中的纯文本内容保存为一个数组,最后将这些数组组合成CSV数据格式,代码如下:

let data = [
  ['姓名', '学号', '成绩'],
  ...(function() {
    let arr = [];
    document.querySelectorAll('table tr').forEach(function(row) {
      let rowArray = [];
      row.querySelectorAll('td').forEach(function(cell) {
        rowArray.push(cell.innerText);
      });
      arr.push(rowArray);
    });
    arr.shift(); // 删除第一行的表头
    return arr;
  })()
];

这里使用了CSS选择器table trtd获取所有的行和单元格。遍历时,对于每一行,使用querySelectorAll()方法获取这一行的所有单元格,使用forEach()遍历处理每个单元格的文本。最后将遍历后得到的二维数组用扩展运算符合并起来。

然后,按照上面的流程使用这个数组来生成CSV文件。

以上就是对“javascript导出csv文件(excel)的方法示例”的详细讲解,包括CSV文件格式介绍、数据转换、文件下载以及两个示例。希望对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript导出csv文件(excel)的方法示例 - Python技术站

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

相关文章

  • C#的WEBBROWSER与JS交互小结

    下面我将详细讲解“C#的WEBBROWSER与JS交互小结”的完整攻略。 简介 WEBBROWSER是Windows Forms中提供的一个控件,可以直接将Web页面嵌入到WinFrom应用程序中。WEBBROWSER中内置了一个解析HTML的引擎,可以渲染和展示Web页面。由于WEBBROWSER可以作为WinFrom应用程序的一部分,它可以与其他组件一起…

    JavaScript 2023年6月10日
    00
  • JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)

    JS数组操作是对数组进行增加、删除、翻转、转字符串、取索引、截取、剪接和数组合并等常见操作。 增加操作 数组的增加操作包括push和unshift,push用于在数组末尾添加一个或多个元素,unshift用于在数组开头添加一个或多个元素。示例如下: let arr = [1, 2, 3]; // push arr.push(4); console.log(a…

    JavaScript 2023年5月27日
    00
  • JavaScript 12个有用的数组技巧

    标题:JavaScript 12个有用的数组技巧完整攻略 1.使用forEach替代for循环 ForEach可以在不使用for循环的情况下更简洁、更容易理解的遍历数组内的元素,例如: const numbers = [1, 2, 3, 4, 5]; numbers.forEach((number) => { console.log(number); …

    JavaScript 2023年5月27日
    00
  • JavaScript阻止事件冒泡的方法

    JavaScript中阻止事件冒泡是前端开发过程中常见的需求。事件冒泡是指当一个元素上的事件被触发时,它会向父级元素传递,直到最顶层的元素。在某些情况下,我们需要阻止这种事件冒泡,使事件只在当前元素上执行。以下是阻止事件冒泡的三种方法: 方法一:使用event.stopPropagation 在事件回调函数中使用event.stopPropagation可以…

    JavaScript 2023年6月10日
    00
  • JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数

    下面是关于 JavaScript 中 JSON.parse 函数和 JSON.stringify 函数的详细讲解。 JSON 简介 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它是基于 JavaScript 的一个子集,可以被多种不同编程语言读取和写入。 在 JavaScript 中要想将 JSON 数据转…

    JavaScript 2023年5月27日
    00
  • JS异步代码单元测试之神奇的Promise

    JS异步代码单元测试一直是开发人员要面对的挑战。为了解决这个问题,Promise异步编程模式被引入到JavaScript中,因其简单、灵活和可重用性而受到广泛认可。在本攻略中,我们将深入探讨如何在单元测试中使用Promise,以及如何跟踪异步代码逻辑和处理可能的异步回调。 异步单元测试面临的问题 在传统的单元测试中,我们可以通过直接调用函数、对函数输出结果进…

    JavaScript 2023年5月28日
    00
  • JavaScript实现cookie的操作

    下面是详细讲解 JavaScript 实现 Cookie 操作的攻略。 什么是 Cookie Cookie(中文翻译为“网页 Cookie”或者“浏览器 Cookie”)是网站为了辨别用户身份的一种标识,是存在用户本地终端上的数据。Cookie 是小型文本文件,由网站服务器发送给用户浏览器,浏览器会将其存储在本地,之后每次请求该网站时都会携带该 Cookie…

    JavaScript 2023年6月11日
    00
  • JSON.stringify的多种用法总结

    现在我来为你详细讲解一下“JSON.stringify的多种用法总结”的完整攻略。 JSON.stringify的多种用法总结 定义 JSON.stringify() 方法将 JavaScript 值转换为 JSON 字符串。 该方法可以接受三个参数:要序列化的JavaScript对象、替换值的函数、以及结果包含的对象的属性。通常我们只需要传入第一个参数即可…

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