将带有换行符的值导出到 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 数据表的主要内容,如果未能解决你的问题,请参考以下文章