簡體   English   中英

將帶有換行符的值導出到Excel中的單個單元格中。 jQuery數據表

[英]Export value with Linebreaks into single cell in Excel. jQuery Datatables

我已成功使用jQuery DataTables將Web應用程序中的HTML表導出到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"
        }]
    }
});

信用: 發布

它似乎對我不起作用。 所有值都轉到單個單元格,但不包括換行符。

任何幫助將不勝感激。 謝謝

嘗試使用:

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 您可以從以下網址下載: https//cdn.datatables.net/tabletools/2.2.4/

這對我有用,並產生:

CSV:

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

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

Excel:

在此處輸入圖片說明

注意,如果通過File - Open *.csv ,則這是Excel中的結果。 文本導入向導不能正確處理單元格內的換行符。

如果內容包含換行符,則需要在雙引號中定界。 所以用

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

當然,僅當內容包含\\ r \\ n時才需要執行此操作(否則數字將格式化為文本)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM