使用Javascript将数据导出为CSV

6

我有两个函数

  1. 导出HTML表格
  2. 下载CSV文件

不幸的是,我的文件下载为“未定义”,没有.csv文件类型。

格式似乎没问题,因为该文件可以用任何文本编辑器打开,并且可以看到所有表格数据以逗号为分隔符。这使得Excel很容易接受文件并将每列和行分开。

但我需要文件下载时带有.csv文件扩展名。

以下是我的两个函数:

function exportTableToCSV(html, filename) {
    var csv = [];
    var rows = document.querySelectorAll("table tr");

    for(var i = 0; i < rows.length; i++){
        var row = [], cols = rows[i].querySelectorAll("td, th");
        for(var j = 0; j < cols.length; j++){
            row.push(cols[j].innerText);
        }
        csv.push(row.join(","));
    }

    // download csv file
    downloadCSV(csv.join("\n"), filename);
}

function downloadCSV(csv, filename) {
        var csvFile;
 var downloadLink;

 csvFile = new Blob([csv], {type:"text/csv"});
 downloadLink = document.createElement("a");
 downloadLink.download = filename;
 downloadLink.href = window.URL.createObjectURL(csvFile);
 downloadLink.style.display = "none";
 document.body.appendChild(downloadLink);
 downloadLink.click();
}

exportTableToCSV('', 'test.csv');

我认为问题出在“function downloadCSV”上。非常感谢任何帮助或提供当前可用的工作示例的链接。


你的代码似乎运行良好,你使用的是哪个浏览器? - Phillip Thomas
我们如何调整代码以处理字符串中的双引号? - mesqueeb
1个回答

4

您是否像这样将文件名传递给了exportTableToCSV:

exportTableToCSV(null,'test.csv')

请访问https://jsfiddle.net/mdearman/d1zpndcu/查看。

经过快速测试,其在Chrome浏览器中运行正常,但在IE浏览器中无法正常工作(仅供参考)。


我在jsfiddle上看到它能够工作。与我的代码没有任何区别,但我的网站仍然下载“undefined”。而且,文件名传递正确。也许这是某种服务器问题?那可能吗?这应该不需要任何JS库,对吧? - kris_needs_help
我想不出来。也许是某种安全区域问题?或者与CSV文件的“内容”有关,可能会发生某种MIME嗅探?但我认为这不会导致未定义。 - Mike Dearman
我的错误在于我调用'exportTableToCSV'的方式。我使用了exportTableToCSV('filename.csv'),但没有传递第一个参数。哇,我真是个蠢货!非常感谢Mike的帮助! - kris_needs_help
不用谢,是的,我看到“html”参数没有被使用。 - Mike Dearman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接