使用Linebreaks将值导出到Excel中的单个单元格中。 jQuery数据表

我成功地从Web应用程序导出HTML表格,使用jQuery DataTable的Excel。 然而,一个特定的列具有包含换行符和制表符的值。 我设法通过分别用<br>和(n5)replace新行(\ n)和制表符(\ t)来正确地在HTML表格上显示数据。

问题是出口到Excel时,我需要有线断行,但保持在一个单元格中的所有值。

这里是我的jQuery代码:

  $('#papercliptable').dataTable({ "sDom": 'T<"clear">lfrtip', "tableTools": { "aButtons": [{ "sExtends": "xls", "sButtonText": "Excel", "fnCellRender": function (sValue, iColumn, nTr, iDataIndex) { console.log("sValue = " + sValue); console.log("iColumn = " + iColumn); return sValue.replace(/<br\s*\/?>/ig, "\r\n"); }, "sNewLine": "\r\n" }, { "sExtends": "print", "sMessage": "Metrics" }] } }); 

信用: 邮政

这似乎并不适用于我。 所有值都将转换为单个单元格,但不包含换行符。

任何帮助将不胜感激。 谢谢

尝试使用:

 return sValue.replace(/<br\s*\/?>/ig, "\x0B"); 

产生以下 在这里输入图像说明

我们有一个完整的例子。

 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.7/css/jquery.dataTables.min.css"> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/tabletools/2.2.4/css/dataTables.tableTools.css"> <script type="text/javascript" language="javascript" src="https://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/1.10.7/js/jquery.dataTables.min.js"></script> <script type="text/javascript" language="javascript" src="https://cdn.datatables.net/tabletools/2.2.4/js/dataTables.tableTools.min.js"></script> <script type="text/javascript" language="javascript" class="init"> $(document).ready(function() { $('#papercliptable').DataTable( { dom: 'T<"clear">lfrtip', tableTools: { "sSwfPath": "/copy_csv_xls_pdf.swf", "aButtons": [{ "sExtends": "xls", "sFileName": "test.csv", "fnCellRender": function (sValue, iColumn, nTr, iDataIndex) { console.log("sValue = " + sValue); console.log("iColumn = " + iColumn); re = /<br\s*\/?>/i; if (re.test(sValue)) { return '"' + sValue.replace(/<br\s*\/?>/ig, "\n") + '"'; } else { return sValue; } } }] } }); }); </script> </head> <body> <table id="papercliptable"> <thead> <tr> <th>A</th> <th>B</th> <th>C</th> <th>D</th> </tr> </thead> <tbody> <tr> <td>12345</td> <td>Value1</td> <td>Value2</td> <td>This<br/>is<br/>a<br/>test.</td> </tr> </tbody> </table> </body> </html> 

请注意,您必须在您自己的域中拥有copy_csv_xls_pdf.swf 。 您可以从以下url下载: https : //cdn.datatables.net/tabletools/2.2.4/

这适用于我,并产生:

CSV:

 ABCD 12345 Value1 Value2 "This is a test." 

请注意,列之间的空格是水平制表符"\t" 0x09

Excel中:

在这里输入图像描述

请注意,如果*.csv通过File - Open ,则这是Excel中的结果。 文本导入向导无法以正确的方式处理单元格内的换行符。

如果内容包含新行字符,则需要在双引号内对其进行分隔。 所以使用

 return '"' + sValue.replace(/<br\s*\/?>/ig, "\r\n") + '"'; 

当然,只有当内容包含\ r \ n时才需要这样做(否则数字会被格式化为文本)