2015-07-13 49 views
1

我正在使用以下腳本從特定表格生成csv下載。如何更改下載的csv文件的文件名?

我需要能夠更改下載文件的名稱,以便它添加當前日期以及它從中下載的表的名稱。目前,它只是調用使用attr() CSV文件export.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(/"/g, '""'); // 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 
    }); 
}); 
+0

只需更改第二個參數值...? –

+0

你是指哪一個?它在文件名export.csv結尾的部分?我不確定要改變它。謝謝 – James

+0

回答爲您填寫完整的說明。 –

回答

0

您可以檢索表的名稱:

var tableName = $('#dvData > table').attr('name'); 

您可以格式化當前日期爲可用字符串像這樣的文件名:

function padZeroes(value, length) { 
    var zeroes = new Array(length).join('0'); 
    return (zeroes + value).substr(-length); 
} 

var today = new Date(); 
var year = today.getFullYear().toString(); 
var month = padZeroes(today.getMonth() + 1, 2); 
var day = padZeroes(today.getDay(), 2); 
var hours = padZeroes(today.getHours(), 2); 
var minutes = padZeroes(today.getMinutes(), 2); 

全部放在一起在click處理:

$(".export").on('click', function (event) { 
    var $table = $('#dvData > table'); 
    var tableName = $table.attr('name'); 

    function padZeroes(value, length) { 
     var zeroes = new Array(length).join('0'); 
     return (zeroes + value).substr(-length); 
    } 

    var today = new Date(); 
    var year = today.getFullYear().toString(); 
    var month = padZeroes(today.getMonth() + 1, 2); 
    var day = padZeroes(today.getDay(), 2); 
    var hours = padZeroes(today.getHours(), 2); 
    var minutes = padZeroes(today.getMinutes(), 2); 
    var filename = tableName + '_' + year + month + day + '_' + hours + minutes; 

    exportTableToCSV.apply(this, [ $('#dvData > table'), filename ]); 
}); 
+0

謝謝!我嘗試使用該代碼,但由於某種原因,文件名是「undefined_20150701_1440」它似乎有時間正確,但日期似乎沒有意義,並沒有生成表名稱,任何想法?謝謝 – James