javascript - 如何在 Javascript 中使用自定义文件名创建分号分隔的 CSV?

标签 javascript export-to-csv

Stack Overflow 上有大量有关如何使用 Javascript 创建 CSV 文件的信息。但我正在努力寻找一种方法来创建分号分隔的数据能够在下载时设置文件名。

下面是我的代码的简化版本。最后几行说明了问题:带冒号的 CSV 效果很好。带分号的 CSV 失败,浏览器将无法下载该文件(Chrome 显示“网络错误”)。

const arrayToCsvFile = (dataArray, delimiter, filename) => {
  const csv = createCsv(dataArray, delimiter);
  exportCsvToFile(csv, filename, delimiter);
};

const createCsv = (rows, delimiter) => {
  let returnStr = "";
  rows.forEach(row => {
    row.forEach(field => {
      returnStr += field + delimiter;
    });
    returnStr += "\r\n";
  });
  return returnStr;
};

const exportCsvToFile = (csvData, filename, delimiter) => {
  csvData = "data:text/csv;charset=utf-8" + delimiter + csvData;
  const encodedUri = encodeURI(csvData);
  // Trick to set filename
  const link = document.createElement("a");
  link.setAttribute("href", encodedUri);
  link.setAttribute("download", filename);
  document.body.appendChild(link); // Required for Firefox(?)
  link.click();
};


const testData = [["a", "b", "c"], ["1", "2", "3"]];

// Line below works
// arrayToCsvFile(testData, ",", "myCustomFileNameWithCommaSep.csv");

// This does not work - browser fails to download file.
arrayToCsvFile(testData, ";", "myCustomFileNameWithSemiSep.csv");

最佳答案

查看 data URI scheme 的定义.

data:[<media type>][;base64],<data> 


The data, separated from the preceding part by a comma (,).

现在看看你的代码:

csvData = "data:text/csv;charset=utf-8" + delimiter + csvData;

您将在 CSV 中重复使用您在数据 URI 中使用的分隔符,但分隔的数据 URI必须是逗号!

在那里使用逗号:

csvData = "data:text/csv;charset=utf-8," + csvData;

关于javascript - 如何在 Javascript 中使用自定义文件名创建分号分隔的 CSV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57268739/

相关文章:

javascript - 如何检查函数是否有参数以及参数是否为数字

javascript - 我无法编写一个开关来显示和隐藏元素?

javascript - 使用 jQuery 获取控件属性并创建 json

ms-access - 如何使用 vba 将临时记录集导出到 csv 文件

mysql - 将 MySQL 数据导出到 CSV 文件时如何保留换行符?

javascript - PouchDB 使用 .put() 给出 409 "Document update conflict"错误,即使使用正确的 ._rev

javascript - 如何使用复杂对象或 json 在 ng-table 中添加动态列?

javascript - 如何使用 JQuery 或 Javascript 将数据导出为 CSV

c# - 想在桌面或任何位置看到输出 "data.csv"

python - 如何使用原始数据中的id导出k-means算法的输出(簇标签)