首页 文章

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

提问于
浏览
8

我使用jQuery DataTables成功地将HTML表从Web应用程序导出到excel . 但是,一个特定列的值包含换行符和制表符 . 我已经设法通过分别用 <br> 和&nbsp;(x5)替换新行(\ 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"
        }]
    }
});

图片来源:post

它似乎对我不起作用 . 所有值都转到单个单元格,但不是新行字符 .

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

尝试使用:

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

产生以下
enter image description here

2 回答

  • 2

    让我们有一个完整的例子 .

    <!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
    is
    a
    test.</td> </tr> </tbody> </table> </body> </html>

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

    这对我有用,并产生:

    CSV:

    A   B   C   D
    12345   Value1  Value2  "This
    is
    a
    test."
    

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

    Excel中:

    enter image description here

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

  • 3

    如果内容包含换行符,则需要在双引号内分隔 . 所以使用

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

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

相关问题