2015-07-13 106 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