当前位置: 首页 > 知识库问答 >
问题:

jQuery-从表下载csv

郤令
2023-03-14

我正在尝试将html表下载为cvs文件。我的代码正在工作,但是,它正在下载一个名为“未知”的文件,没有扩展名。csv'。如果我手动添加扩展名,csv文件将正确显示除第一行之外的所有内容,该行还包含html代码(请参见所附图片)

我做错了什么?

以下是脚本

$("#btnExport ").on('click', function (event) {

            //Get table
        var table = $(".my-table")[0];

        //Get number of rows/columns
        var rowLength = table.rows.length;
        var colLength = table.rows[0].cells.length;

            console.log(rowLength, colLength);

        //Declare string to fill with table data
        var tableString = "";

        //Get column headers
        for (var i = 0; i < colLength; i++) {
            tableString += table.rows[0].cells[i].innerHTML.split(",").join("") + ",";
        }

        tableString = tableString.substring(0, tableString.length - 1);
        tableString += "\r\n";

        //Get row data
        for (var j = 1; j < rowLength; j++) {
            for (var k = 0; k < colLength; k++) {
                tableString += table.rows[j].cells[k].innerHTML.split(",").join("") + ",";
            }
            tableString += "\r\n";
        }

        //Save file
        if (navigator.appName == "Microsoft Internet Explorer") {
            //Optional: If you run into delimiter issues (where the commas are not interpreted and all data is one cell), then use this line to manually specify the delimeter
             tableString = 'sep=,\r\n' + tableString;

             myFrame.document.open("text/html", "replace");
             myFrame.document.write(tableString);
             myFrame.document.close();
             myFrame.focus();
             myFrame.document.execCommand('SaveAs', true, 'data.csv');
         } else {
            csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(tableString);
             $(event.target).attr({
                 'href': csvData,
                 'target': '_blank',
                 'download': 'my_data.csv'
             });
         }

    });

共有2个答案

胥智
2023-03-14

使用此功能

 function download(strData, strFileName, strMimeType) {
            var D = document,
                a = D.createElement("a");
                strMimeType= strMimeType || "application/octet-stream";


            if (navigator.msSaveBlob) { // IE10
                return navigator.msSaveBlob(new Blob([strData], {type: strMimeType}), strFileName);
            } /* end if(navigator.msSaveBlob) */


            if ('download' in a) { //html5 A[download]
                a.href = "data:" + strMimeType + "," + encodeURIComponent(strData);
                a.setAttribute("download", strFileName);
                a.innerHTML = "downloading...";
                D.body.appendChild(a);
                setTimeout(function() {
                    a.click();
                    D.body.removeChild(a);
                }, 66);
                return true;
            } /* end if('download' in a) */


            //do iframe dataURL download (old ch+FF):
            var f = D.createElement("iframe");
            D.body.appendChild(f);
            f.src = "data:" +  strMimeType   + "," + encodeURIComponent(strData);
            setTimeout(function() {
                D.body.removeChild(f);
            }, 333);
            return true;
        }

然后根据需要调用函数。我点击了按钮。这是代码

<button type="button" class="btn btn-warning btn-medium" id="download" style="color: white; font-weight: bold; background-color: #2175AD; border-bottom-color: #2175AD; margin-bottom: 100px;">Download table As CSV</button>
            <script>
            $("#download").on("click",function(){
                //$("#eventsMax").table2CSV();
                var mintime= d3.min(curdata,function(d){return d.time;});
                var maxtime= d3.max(curdata,function(d){return d.time;});
                var text="\t\t\t\t\t\t\tHere is the Data From "+mintime+" to "+maxtime+"\n\n";
                var csv = $("#eventsMax").table2CSV({delivery:'value'});
                csv=text+csv;
                download(csv, "realtimeData.csv", "text/csv");
            });

不要忘记包括API table2CSV。js发件人http://www.kunalbabre.com/projects/table2CSV.php

周昊乾
2023-03-14

下面是从表中获取csv的另一种方法

csvVar='';
$('#<tableID> tr').each(function(){
  var len=$(this).find('td,th').length;
  i=0;
  $(this).find('td,th').each(function(){
    var cell=$(this);
    if(cell.children().prop('tagName') == 'INPUT')
      csvVar+=cell.children().val();
    else if(cell.children().prop('tagName') == 'SELECT')
      csvVar+=$('select option[value="'+cell.children().val() +'"]').html();
    else{
      t=cell.html();
      if(t.indexOf('<br>')>0)
        csvVar+=t.substring(0,t.indexOf('<br>'));
      else if(t.indexOf(',')>0)
        csvVar+=t.replace(',',';');
      else
        csvVar+=t;
    }
    if(i+1<len)
      csvVar+=',';
    i++;
  });
  csvVar+='\n';
});

--编辑--

var textFileAsBlob = new Blob([csvVar], {type:'text/plain'});
var fileNameToSaveAs = 'whateverTable.csv';

var downloadLink = document.createElement("a");
downloadLink.download = fileNameToSaveAs;
downloadLink.innerHTML = "Download File";
if (window.URL != null)
{
  // Chrome allows the link to be clicked
  // without actually adding it to the DOM.
  downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
}
else
{
  // Firefox requires the link to be added to the DOM
  // before it can be clicked.
  downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
  downloadLink.onclick = destroyClickedElement;
  downloadLink.style.display = "none";
  document.body.appendChild(downloadLink);
}

downloadLink.click();
 类似资料:
  • 问题内容: 我打算使用Google下载UI和Core的jQuery库。我的问题是,他们允许我为此下载CSS还是应该自己托管它? 另外,如果我使用Google加载,应该如何加载其他插件?我可以将所有插件压缩在一起吗,还是应该将其单独压缩? 问题答案: Google AJAX库API,其中包括jQuery UI(当前为v1.10.3),还包括热门主题: Google Ajax库API(CDN) The

  • 一旦您对 jQuery UI 有了基本了解,您就可以亲自。请从 jQuery UI 网站上的 Download Builder(下载生成器) 页面下载 jQuery UI 的副本。 创建自定义 jQuery UI 下载 jQuery UI 的下载生成器(Download Builder)允许您选择您需要下载的组件,为项目获取一个自定义的库版本。创建自定义 jQuery UI 下载需要以下三个步骤:

  • 问题内容: 在我的应用程序中,在客户端创建了一个json对象。该对象被发布到HttpServlet,后者基于POST数据创建pdf文件。 该文件将发送回用户。调用成功函数,并记录流数据。但是,我想要下载该文件。 如何实现呢? 我的客户端代码: }); 然后servlet创建文件: 日志中的输出: 我的解决方案:* 有关指针,请参见http://www.particletree.com/notebo

  • 我试图下载从我的仓库在GitHub 我使用,这是返回: 如何创建<code>设置。py和我必须放什么?

  • 问题内容: 在我的ASP.NET MVC项目中,我使用ClosedXML生成了一个excel文件。 它在非ajax调用中效果很好。这是我的控制器动作方法 现在,我正在尝试通过ajax请求来执行此操作。但是文件不是从mvc控制器发送的。 我该怎么办呢?先感谢您。 问题答案: 为什么不?ramiramilu关于使用和是正确的。除了ASP.NET MVC3,我做过同样的事情。 我建议使用返回的控制器 仅

  • 问题内容: 我在这里指定了非常相似的要求。 我需要让用户的浏览器在以下情况下手动开始下载 但是我无法使用该方法,因为它将当前页面内容替换为您尝试下载的文件。 相反,我想在新窗口/选项卡中打开下载。这怎么可能? 问题答案: 使用不可见的: 要强制浏览器下载本来可以呈现的文件(例如HTML或文本文件),则需要服务器将文件的MIME类型设置为无意义的值,例如或另外,用于任意二进制数据。 如果只想在新标签