【问题标题】:How to export data to CSV using Javascript?如何使用 Javascript 将数据导出到 CSV?
【发布时间】:2020-08-03 22:39:18
【问题描述】:

我设法编写了一个脚本,将数据从 Javascript 的 GET 请求导出到 CSV。但是我有一个unit 变量,它有更多字段(时间、高度、纬度、o3、co2、ch2o)。如何使用从脚本中获取的值创建包含更多列的 CSV?

到目前为止,我已经设法创建了一个包含多个标题的 CSV,但我不知道如何用数据填充 CSV 的行。我已经设法完全填充了一列。

在下面的函数中,我使用unit[Object.keys(unit)[4]] 只获取co2 数据。如何将数据附加到每一列?

function download_csv(data, sensor) {
  var csv = 'Day, altitude, latitude, o3, co2, ch2o\n';
  for (var index in data) {
    if (!data.hasOwnProperty(index)) continue;
    var unit = data[index];
    csv += unit[Object.keys(unit)[4]];
    csv += "\n";
  }
  var hiddenElement = document.createElement('a');
  hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csv);
  hiddenElement.target = '_blank';
  hiddenElement.download = sensor + '.csv';
  hiddenElement.click();
}

数据具有以下格式:

【问题讨论】:

  • 你能给data举个例子吗?
  • @wederer 我已经用数据图像更新了问题。

标签: javascript jquery csv download get


【解决方案1】:

假设 data 参数包含一个用于构建 CSV 数据的对象数组,您可以使用 Object.keys()Object.value() 动态构建数据。使用这种方法,无论键名是什么,或者数据中包含多少个键名都无关紧要。

function download_csv(data, sensor) {
  let csvHeader = Object.keys(data[0]).join(',') + '\n'; // header row
  let csvBody = data.map(row => Object.values(row).join(',')).join('\n');

  var hiddenElement = document.createElement('a');
  hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(csvHeader + csvBody);
  hiddenElement.target = '_blank';
  hiddenElement.download = sensor + '.csv';
  hiddenElement.click();
}

let data = [{
  lorem: 'ipsum',
  foo: 'bar',
  fizz: 'buzz'
}];
download_csv(data, 'foobar');

如果您需要支持旧版浏览器,需要注意的一点是Object.values 在 IE 中不受支持。不过有一个polyfill 可用。

【讨论】:

    猜你喜欢
    • 2013-04-11
    • 1970-01-01
    • 2014-05-24
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多