javascript - 如何将数据从 csv 文件或 Excel 文件导出到 JavaScript 对象?

标签 javascript html excel csv chart.js

我想知道是否有一种方法可以将数据从 CSV 文件导出到 javascript 对象,并且当有人编辑 CSV 文件时,它会自动在 javascript 文件中更改。非常感谢。

最佳答案

以下步骤在下面的代码片段中实现。根据需要进行自定义。

  1. 选择输入 CSV 文件。 (代码片段针对 UTF-8 编码的 CSV 文件进行了测试)
  2. 读取 CSV 文件数据
  3. 解析 CSV 文件数据并构造 JSON 对象
  4. 根据需要操作或修改 JSON 对象。
  5. 将 JSON 对象导出为 CSV

var CsvRows;
var headers;

// This event will be triggered when file is selected
// Note: This code is tested for UTF-8 encoded CSV file 
function handleChange(evt) {
  var reader = new FileReader();
  reader.onload = function() {
  
    //reader.result gives the file content
    document.getElementById('out').innerHTML = reader.result;
    
    //parse the result into javascript object
    var lines = reader.result.split('\r\n');
    headers = lines[0].split(',');
    lines.shift();
    CsvRows = lines.map((item) => {
      var values = item.split(',');
      var row = {};
      headers.map((h, i) => {
        row[h] = values[i];
      });
      return row;
    });
    console.log(CsvRows);
    document.getElementById('result').style.display = 'block'
  };

  //read the selected file
  reader.readAsBinaryString(evt.files[0]);
};


//export the javscript object as csv
function exportCSV() {
  //contruct the csv ad data url
  let csvContent = "data:text/csv;charset=utf-8," +
    headers.join(",") + "\r\n";


  //contruct the data in csv format
  var data = CsvRows.map(e => {
    var line = '';
    headers.map((h) => {
      line += e[h] + ',';
    });
    return line.substr(0, line.length - 1);
  }).join("\r\n")

  csvContent += data;

  //contruct an anchor tag 
  var encodedUri = encodeURI(csvContent);
  var link = document.createElement("a");
  link.setAttribute("href", encodedUri);
  
  //provide the export file name
  link.setAttribute("download", "mydata.csv");
  document.body.appendChild(link); // Required for FF

  //trigger download of CSV
  link.click();

  link.remove();
}
<input type="file" onchange="handleChange(this)" accept=".csv" />

<div id="result" style="display:none;">
  <div id="out"></div>
  <div>See console for Javascript Object.</div>
  <div>Export the imported file <button onclick="exportCSV()">Export</button></div>
</div>

以上代码片段仅适用于 CSV 文件。必须针对 Excel 文件进行自定义实现。

关于javascript - 如何将数据从 csv 文件或 Excel 文件导出到 JavaScript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58727579/

相关文章:

javascript - 隐藏和显示特定类的跨度

html - 我的 css 文件中的跨度字段错误

javascript - 如何从用户内存上传kml文件并在 map 上显示

excel - 如何仅使用 1 个公式通过 vlookup 对 2 行的值求和?

javascript - NodeJS 的 Promise 最佳实践

javascript - 如何制作欢迎信息

javascript - 使用 jQuery 动态向表添加行

html - @media print 的 CSS 页 x of y

vba - 如何在VBA中删除前一行或后一行非空的空行

vba - Excel VBA 创建按钮以复制/重命名工作表和整个工作簿