2013-04-18 57 views
7

我需要的是: 我們在response.d中有值,即逗號分隔值。現在我想將response.d的數據導出到.csv文件。如何使用JQuery或Javascript將數據導出爲CSV

我寫了這個函數來執行此操作。我已收到response.d中的數據,但未導出到.csv文件,因此請爲此問題提供解決方案,以.csv文件導出數據。

function BindSubDivCSV(){ 
    $.ajax({ 
     type: "POST", 
     url: "../../WebCodeService.asmx/ShowTrackSectorDepartureList", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (response) { 
     alert(response.d);//export to csv function needed here 
     }, 
     error: function (data) {} 
    }); 
    return false; 
} 
+1

_so爲此問題提供解決方案_聽起來非常苛刻: – dbf

+0

你好dbf,我不要求我的朋友只是尋求我的問題的解決方案。你能幫忙嗎? – Praveen

+0

當您將數據發送到服務器時,應該在asp.net中處理它,併發送帶有MIME類型「text/csv」的響應頭 - 這將使其成爲可下載的電子表格 – 2013-04-18 13:02:55

回答

6

如果你有在服務器端是如何工作的無法控制,這裏是我在另一個SO問題都提供了一個客戶端解決方案,爲OP的接受待定:Export to CSV using jQuery and html

有有一些限制或限制,你必須考慮,正如我在那裏的答案中提到的那樣,它有更多的細節。


這是相同的演示我已經提供: http://jsfiddle.net/terryyounghk/KPEGU/

而且給你什麼樣的劇本看起來像一個大概的瞭解。

你需要改變的是你如何迭代你的數據(在另一個問題的情況下,它是表格單元格)來構造一個有效的CSV字符串。這應該是微不足道的。

$(document).ready(function() { 

    function exportTableToCSV($table, filename) { 

     var $rows = $table.find('tr:has(td)'), 

      // Temporary delimiter characters unlikely to be typed by keyboard 
      // This is to avoid accidentally splitting the actual contents 
      tmpColDelim = String.fromCharCode(11), // vertical tab character 
      tmpRowDelim = String.fromCharCode(0), // null character 

      // actual delimiter characters for CSV format 
      colDelim = '","', 
      rowDelim = '"\r\n"', 

      // Grab text from table into CSV formatted string 
      csv = '"' + $rows.map(function (i, row) { 
       var $row = $(row), 
        $cols = $row.find('td'); 

       return $cols.map(function (j, col) { 
        var $col = $(col), 
         text = $col.text(); 

        return text.replace('"', '""'); // escape double quotes 

       }).get().join(tmpColDelim); 

      }).get().join(tmpRowDelim) 
       .split(tmpRowDelim).join(rowDelim) 
       .split(tmpColDelim).join(colDelim) + '"', 

      // Data URI 
      csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv); 

     $(this) 
      .attr({ 
      'download': filename, 
       'href': csvData, 
       'target': '_blank' 
     }); 
    } 

    // This must be a hyperlink 
    $(".export").on('click', function (event) { 
     // CSV 
     exportTableToCSV.apply(this, [$('#dvData>table'), 'export.csv']); 

     // IF CSV, don't do event.preventDefault() or return false 
     // We actually need this to be a typical hyperlink 
    }); 
}); 
+1

是否有解決此問題的方法在IE中工作? – n00b

+0

工作就像一個魅力! – cwd

4

使用上面的代碼(特里楊)我發現,在Opera將拒絕給文件命名(簡單地把它稱爲​​「下載」),並不會總是可靠地工作。

爲了得到它的工作,我不得不創建一個二進制BLOB:

var filename = 'file.csv'; 
    var outputCSV = 'entry1,entry2,entry3'; 
    var blobby = new Blob([outputCSV], {type: 'text/plain'}); 

    $(exportLink).attr({ 
       'download' : filename, 
       'href': window.URL.createObjectURL(blobby), 
       'target': '_blank' 
       }); 

    exportLink.click(); 

還要注意的是動態創建的「exportLink」變量不會與Firefox的工作,所以我必須有這個在我的HTML文件:

<div> 
     <a id="exportLink"></a> 
    </div> 

使用上面我已經成功地測試了這個使用Windows 7 64位和Opera(V22),火狐(v29.0.1)和Chrome(v35.0.1916.153米)。

要在Internet Explorer上啓用類似的功能(雖然方式不太優雅),我必須使用Downloadify。

相關問題