将带有换行符的值导出到 Excel 中的单个单元格中。 jQuery 数据表

Posted

技术标签:

【中文标题】将带有换行符的值导出到 Excel 中的单个单元格中。 jQuery 数据表【英文标题】:Export value with Linebreaks into single cell in Excel. jQuery Datatables 【发布时间】:2015-06-18 13:27:42 【问题描述】:

我正在使用 jQuery DataTables 成功地将 html 表格从 Web 应用程序导出到 Excel。但是,一个特定列的值包含换行符和制表符。通过将新行 (\n) 和制表符 (\t) 分别替换为 <br> 和  (x5),我设法在 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");

产生以下

【问题讨论】:

已经删除了我的答案,抱歉没有解决。 为此开启了赏金活动。我自己很好奇:) – 大卫康拉德 似乎有些混乱。从代码看来,软中断是用“\r\n”创建的,实际上是eol。 “\n”实际上是excel格式的换行符。但是 Excel 中没有选项卡。标签是一个事件。用“”替换标签。 【参考方案1】:

让我们举一个完整的例子。

<!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:

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

【讨论】:

格拉茨。看过你的个人资料。您在 Excel 中的专业知识和给定的示例让我相信,这是一个普遍正确的答案,它将在未来帮助人们。 对不起,但我相信在这种情况下没有“通常正确的答案”。由于 tableTools 生成 CSV 而不是 XLS(X),因此它们的结果将永远依赖于区域设置和系统以及 Excel 中的导入类型。【参考方案2】:

如果内容包含换行符,您需要用双引号将其分隔。所以使用

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

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

【讨论】:

可以解释一下。 这是专门关于 jQuery 数据表和导出到 Excel 的 是的,datatables.net/extensions/tabletools 的那个对吗?这就是我检查的内容,尽管是字符串数据。 嘿@psycho,这个答案是否能让你保持单元格内的换行符?

以上是关于将带有换行符的值导出到 Excel 中的单个单元格中。 jQuery 数据表的主要内容,如果未能解决你的问题,请参考以下文章

在 BIRT 中导出 Excel 中的表格单元格文本换行

带有填充零单元格的报告显示为#VALUE!在 Excel 中

将Excel单元格导出为单个文本文件

POI 插入单个单元格

poi 导出excel 怎么设置合并的单元格自动换行

将所有列值与 Excel 中的单个单元格进行比较