2014-07-07 32 views
7

tôi có chức năng sau bằng cách sử dụng tính năng này, tôi đang xuất tệp html của mình sang tệp csv. vài ngày/tháng trước, nó hoạt động tốt trong trình duyệt google chrome (vẫn hoạt động tốt trong FF). bây giờ đột nhiên nó ngừng hoạt động để chuyển đổi dữ liệu sang định dạng csv.Xuất bảng HTML sang csv trong trình duyệt google chrome

khi tôi đang nhấp vào xuất khẩu nút i am có thể tải tập tin nhưng khi tôi đang cố gắng để mở trong MS Excel/Libre Office Calc nó không mở trong đó.

tôi cũng có thể thấy cả dữ liệu được xuất cũng như hiển thị dữ liệu giống như được phân tách.

bất kỳ ai cũng có thể đề xuất cho tôi điều gì xảy ra với mã của tôi trong trình duyệt google chrome.

function exportReportTableToCSV($table, filename) { 
    var dumpd=''; 
    var csvData =''; 

    $table.each(function(){ 
      var $rows = $(this).find('tr:has(td)'); 
      var $header = $(this).find('tr:has(th)');     

       tmpColDelim = String.fromCharCode(11), // vertical tab character 
       tmpRowDelim = String.fromCharCode(0), // null character 

       colDelim = '","', 
       rowDelim = '"\r\n"', 

       csv = '"' + $header.map(function (i, head) { 
        var $head = $(head), 
         $cols = $head.find('th'); 

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

         if(text == " ") 
           text = ""; 
         if(text == "PROGRAMS") 
           text = ""; 
         console.log(text); 
         return text.replace('"', '""'); 

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

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

      csv+='\r\n'; 

      csv+= '"' + $rows.map(function (i, row) { 
        var $row = $(row), 
         $cols = $row.find('td'); 

        return $cols.map(function (j, col) { 
         var $col = $(col); 
         var text; 
          if($($(col)).find("input:checkbox").length > 0) 
           text = $($(col)).find("input:checkbox").prop('checked') ? 'Yes' : 'No'; 
          else 
           text = $col.text(); 

          if(text === "") 
          { 
           text = ""; 
          } 

         return text.replace('"', '""'); 

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

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

      dumpd+=csv+"\n\n"; 
     }); 


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

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

Trả lời

20

sau khi thực hiện một số nghiên cứu khác, tôi đã có giải pháp cho việc này.

tôi đã thay đổi này

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

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

Để

var csvData = new Blob([dumpd], { type: 'text/csv' }); //new way 
    var csvUrl = URL.createObjectURL(csvData); 

    $(this) 
    .attr({ 
     'download': filename, 
     'href': csvUrl 
    }); 

và nó làm việc tốt. có vẻ như chrome đã thay đổi một cái gì đó trong phiên bản mới.

Hy vọng nó có thể giúp người khác.

+0

Cảm ơn vì điều này; Tôi đã tìm kiếm mãi mãi cho vấn đề độc đáo này của Chrome. Tôi đang cố gắng làm điều này với các loại tệp khác (lưu dưới dạng txt/excel/pdf) nhưng đang chạy vào cùng một vấn đề mà tôi đã làm cho csv - trong đó Chrome sẽ chỉ tải xuống tệp mà không có phần mở rộng và với chung tên "tải xuống". Bạn có thể có bất kỳ nguồn nào khác có thể hiển thị cách thực hiện điều này cho các loại tệp khác không? Dường như mọi plugin hoặc phương pháp có sẵn dường như không hoạt động bình thường trong Chrome. –

+0

@Kyle họ có hỗ trợ thả dữ liệu trong phiên bản mới của trình duyệt có vẻ như vậy. cho pdf tôi đã không cố gắng được nêu ra nhưng đối với excel .csv tập tin sẽ làm việc tốt. tôi sẽ làm nghiên cứu về pdf và excel cũng và nếu tôi nhận được bất cứ điều gì mới sẽ cập nhật cho bạn :). – Kalpit

+0

Cảm ơn! Nó được nhiều đánh giá cao. –

Các vấn đề liên quan