You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript将数组(对象)导出为Excel或CSV文件?

问题1:如何使用JavaScript导出数组对象至Excel文件?

嘿,这个需求我平时做项目经常碰到,最靠谱的方案是先把数组对象转换成CSV格式(毕竟Excel原生支持打开CSV文件,而且纯前端就能实现,不用依赖第三方库),然后通过Blob生成下载链接。给你详细拆解下步骤和代码:

实现思路

  1. 提取表头:从数组的第一个对象里拿到所有键名,作为CSV的第一行表头;
  2. 转换数据行:遍历每个对象,把对应的值提取出来组成行内容;
  3. 处理特殊字符:如果内容里有逗号、双引号或者换行符,必须转义,不然会破坏CSV的格式;
  4. 生成下载链接:把拼接好的CSV内容转成Blob,创建临时a标签触发浏览器下载。

完整代码示例

// 示例数组对象
const userData = [
  { name: "张三", age: 25, score: 90, remark: "优秀, 进步快" },
  { name: "李四", age: 28, score: 85, remark: "中等\n需加强练习" },
  { name: "王五", age: 22, score: 95, remark: "满分" }
];

function exportObjectsToExcel(data, filename = "user_data.xlsx") {
  // 1. 提取表头
  const headers = Object.keys(data[0]);
  
  // 2. 转换数据行,处理特殊字符
  const rows = data.map(row => {
    return headers.map(fieldName => {
      let value = row[fieldName];
      // 转义双引号,避免格式冲突
      if (typeof value === 'string') {
        value = value.replace(/"/g, '""');
        // 如果内容包含逗号或换行,用双引号包裹
        if (value.includes(',') || value.includes('\n')) {
          value = `"${value}"`;
        }
      }
      return value;
    }).join(',');
  });
  
  // 拼接表头和所有行
  const csvContent = [headers.join(','), ...rows].join('\n');
  
  // 3. 创建Blob并触发下载
  const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
  const url = URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = url;
  link.setAttribute('download', filename);
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
  URL.revokeObjectURL(url); // 释放内存
}

// 调用导出函数
exportObjectsToExcel(userData);

问题2:如何将指定二维数组保存为CSV文件?

你的video数组已经是标准的行列结构了,处理起来比对象数组更简单,核心还是把每一行用逗号拼接,再处理特殊字符避免格式问题。直接上代码:

完整代码示例

var video= [ ["name1",1,2,3], ["name2",4,54,44], ["name3",212,212,1213], ["name4",32,133,33] ];

function export2DArrayToCSV(data, filename = "video_data.csv") {
  // 处理每行元素,兼容特殊字符
  const rows = data.map(row => {
    return row.map(item => {
      let value = item;
      if (typeof value === 'string') {
        value = value.replace(/"/g, '""');
        if (value.includes(',') || value.includes('\n')) {
          value = `"${value}"`;
        }
      }
      return value;
    }).join(',');
  });
  
  const csvContent = rows.join('\n');
  
  // 生成下载链接
  const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
  const url = URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = url;
  link.setAttribute('download', filename);
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
  URL.revokeObjectURL(url);
}

// 调用导出
export2DArrayToCSV(video);

小补充

如果你的数组里完全没有逗号、双引号这类特殊字符,也可以简化成const csvContent = data.map(row => row.join(',')).join('\n'),但加上特殊字符处理会让代码更健壮,适配更多场景。


内容的提问来源于stack exchange,提问作者user13929082

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 18:42:59