纯前端实现表格数据导出为Csv格式数据

首先理解csv格式的文件,

  • CSV即逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录。
  • 每个记录由一个或多个字段组成,用逗号分隔。
  • 使用逗号作为字段分隔符是此文件格式的名称的来源,因为分隔字符也可以不是逗号,有时也称为字符分隔值。
  • CSV文件默认以英文逗号做为列分隔符,换行符作为行分隔符。
  • 如果不提供网页形式只用命令行或二进制程序输出数据到CSV,只需要将数据段按,分割,行按\n分割,写入到一个.csv文件即可。

js实现

/**
 * @description 纯前端实现将表格数据导出为csv格式文件
 * @param {Array} headers 表格头配置项,headers中的key值与data中每一个item的属性名一一对应
 * @param {Array} data 表格数据
 * @param {String} fileName 导出的文件名称
 */
function downloadCsv(header, data, fileName = "导出结果.csv") {
  if (!header || !data|| !Array.isArray(header) || !Array.isArray(data) || !header.length || !data.length) {
    return;
  }
  var csvContent = 'data:text/csv;charset=utf-8,\ufeff';
  const _header = header.map(h => h.title).join(",");
  const keys = header.map(item => item.key);
  csvContent += _header + '\n';
  data.forEach((item, index) => {
    let dataString = '';
    for (let i = 0; i < keys.length; i++) {
      dataString += item[keys[i]] + ',';
    }
    csvContent += index < data.length ? dataString.replace(/,$/, '\n') : dataString.replace(/,$/, '');
  });
  const a = document.createElement('a');
  a.href = encodeURI(csvContent);
  a.download = fileName;
  a.click();
  window.URL.revokeObjectURL(csvContent);
}

使用示例

let header = [
   { key: "order", title: "序号" },
   { key: "name", title: "姓名" },
   { key: "age", title: "年龄" },
   { key: "height", title: "身高" },
   { key: "address", title: "地址" },
 ],
 data = [
   {
     order: 1,
     name: "Abby",
     age: 23,
     height: 168,
     address: "北京,中关村",
   },
   {
     order: 2,
     name: "Leo",
     age: 28,
     height: 183,
     address: "上海,陆家嘴",
   },
   {
     order: 3,
     name: "Alen",
     age: 35,
     height: 178,
     address: "深圳,南山区",
   },
   {
     order: 4,
     name: "Daisy",
     age: 27,
     height: 160,
     address: "广州,天河区",
   },
 ];
 
downloadCsv(header, data, "人员信息表");

结果如下:
在这里插入图片描述

在这里插入图片描述
注意: 如果表格的内容有逗号分隔的,一定要将内容用双引号引起来,否则在导出的时候同一个单元格的内容会被分隔成多列的内容。

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在前端实现导出数据为Excel表格,你可以使用以下方法之一: 1. 使用现有的库或插件:许多JavaScript库和插件可以帮助你在前端导出数据为Excel表格,如 `xlsx`、`exceljs`、`FileSaver.js` 等。这些库提供了方便的方法和功能来处理Excel文件的创建和导出。 2. 手动构建Excel文件:你可以使用JavaScript生成Excel文件的格式(如CSV、XML或XLSX)并将其下载到用户的设备上。这需要一些编码工作,但是可以根据你的需求来实现自定义功能。 以下是两种方法的示例: 使用 `xlsx` 库: ```javascript import XLSX from 'xlsx'; function exportToExcel(data, filename) { const workbook = XLSX.utils.book_new(); const worksheet = XLSX.utils.aoa_to_sheet(data); XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); XLSX.writeFile(workbook, filename); } ``` 使用JavaScript手动构建Excel文件(CSV格式): ```javascript function exportToExcel(data, filename) { let csv = 'data:text/csv;charset=utf-8,'; data.forEach(row => { csv += row.join(',') + '\n'; }); const encodedUri = encodeURI(csv); const link = document.createElement('a'); link.setAttribute('href', encodedUri); link.setAttribute('download', filename); document.body.appendChild(link); link.click(); document.body.removeChild(link); } ``` 在上述示例中,你需要提供一个二维数组 `data`,其中每个子数组表示一行数据,然后将其传递给 `exportToExcel` 函数以导出为Excel表格。 `filename` 参数是要保存的文件名。 请确保在使用这些代码之前,你已经引入了相关的库或插件,或者在手动构建Excel文件时做了必要的修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

英子的搬砖日志

您的鼓励是我创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值