如何在excel“datatables.js”下载中将数字转换为文本

时间:2016-03-22 17:18:13

标签: javascript jquery excel datatables

我正在尝试在下载excel文件时将数字转换为datatables.js中的文本。如果我通常在excel文件中手动将单引号'放在一个它可以工作的数字之前..但是当我以编程方式执行时它不会...我在哪里做错了?以下是我的列声明;

"columns": [
{ "data": "ID", "visible": false, "searchable": false },
{
    "data": "ProductCode", "title": 'Product Code', "visible": true, responsivePriority: 1, render: function (data, type, row) {

        if (type === 'export') {

            return "'" + data;
        }
        else {

            return data;
        }
    }
},
...
]

这是我的按钮声明;

// Initialize Download Button
new $.fn.dataTable.Buttons(table, {

    buttons: [{
        extend: 'excel', text: 'Download Excel', className: 'btn-sm btn-success downloadButton', exportOptions: {
            columns: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
            orthogonal: 'export'
        }
    }]
});

在下载的excel文件中显示如此'12345但是如果我只按F2(编辑)并按回车excel将其转换为文本:(。任何帮助都会非常明显。

2 个答案:

答案 0 :(得分:0)

您是否尝试删除单引号?

这样做return "" + data;。它应该工作。

答案 1 :(得分:0)

我通过在datatable.js文件中的addrow函数中注释掉下面的代码解决了这个问题。

//检测数字 - 不要将数字与前导零或负数匹配

// anywhere but the start
                //if ( typeof row[i] === 'number' || (
                //      row[i].match &&
                //      $.trim(row[i]).match(/^-?\d+(\.\d+)?$/) &&
                //      ! $.trim(row[i]).match(/^0\d+/) )
                //) {
                //  cell = _createNode( rels, 'c', {
                //      attr: {
                //          t: 'n',
                //          r: cellId
                //      },
                //      children: [
                //          _createNode( rels, 'v', { text: row[i] } )
                //      ]
                //  } );
                //}
                //else {

以下是功能

 var addRow = function ( row ) {
            currentRow = rowPos+1;
            rowNode = _createNode( rels, "row", { attr: {r:currentRow} } );

            for ( var i=0, ien=row.length ; i<ien ; i++ ) {
                // Concat both the Cell Columns as a letter and the Row of the cell.
                var cellId = createCellPos(i) + '' + currentRow;
                var cell;

                if ( row[i] === null || row[i] === undefined ) {
                    row[i] = '';
                }

                // Detect numbers - don't match numbers with leading zeros or a negative
                // anywhere but the start
                //if ( typeof row[i] === 'number' || (
                //      row[i].match &&
                //      $.trim(row[i]).match(/^-?\d+(\.\d+)?$/) &&
                //      ! $.trim(row[i]).match(/^0\d+/) )
                //) {
                //  cell = _createNode( rels, 'c', {
                //      attr: {
                //          t: 'n',
                //          r: cellId
                //      },
                //      children: [
                //          _createNode( rels, 'v', { text: row[i] } )
                //      ]
                //  } );
                //}
                //else {
                    // Replace non standard characters for text output
                    var text = ! row[i].replace ?
                        row[i] :
                        row[i].replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, '');

                    cell = _createNode( rels, 'c', {
                        attr: {
                            t: 'inlineStr',
                            r: cellId
                        },
                        children:{
                            row: _createNode( rels, 'is', {
                                children: {
                                    row: _createNode( rels, 't', {
                                        text: text
                                    } )
                                }
                            } )
                        }
                    } );
                //}

                rowNode.appendChild( cell );
            }
            relsGet.appendChild(rowNode);
            rowPos++;
        };