使用 jQuery Datatables 2016 将带有换行符的值导出到 Excel 中的单个单元格
Export value with Linebreaks into single cell in Excel with jQuery Datatables 2016
我试图在使用 DataTables.
I followed their guide to replace certain things with Regex here: DataTables find and replace during export.[=20 将 excel 导出到 excel 时在 HTML table 中保留使用 <br>
的换行符=]
我可以毫无问题地更换东西。但是我没能用换行符替换 <br>
,使同一单元格中的内容保留换行符。
这是我的JS:
$( document ).ready(function() {
var fixNewLine = {
exportOptions: {
format: {
body: function ( data, column, row ) {
// Strip $ from salary column to make it numeric
return column === 5 ?
// THIS WORKS: data.replace(/test/ig, "blablabla"):
data.replace( /<br\s*\/?>/ig, '"'+"\r\n"+'"' ) :
data;
}
}
}
};
$('#table2excel').DataTable({
dom: 'Bfrtip',
buttons:[
$.extend( true, {}, fixNewLine, {
extend: 'copyHtml5'
} ),
$.extend( true, {}, fixNewLine, {
extend: 'excelHtml5'
} ),
$.extend( true, {}, fixNewLine, {
extend: 'pdfHtml5'
} )
]
});
});
问题出在这一行:
data.replace( /<br\s*\/?>/ig, '"'+"\r\n"+'"' ) :
它保存在 excel 中,只有一对 " "
而不是实际的换行符。
请注意,这也不起作用:
data.replace( /<br\s*\/?>/ig, "\r\n"):
有什么建议吗?
这里有一个类似的线程:Export value with Linebreaks into single cell in Excel. jQuery Datatables
但它已经过时了,因为它已经存在一年了,而且 DataTables 已经更新,"TableTools" 已被 "Buttons" 取代。
替换功能内置于 javascript。也许您想删除引号?
data.replace( /<br\s*\/?>/ig, "\r\n")
在 javascript 解释器中为我工作。
您的格式化函数的调用者可能会删除换行符并将其替换为空格
正确答案是:
data.replace( /<br\s*\/?>/ig, "\n" ) :
但是,打开excel时需要按"wrap text"按钮。
如果有人知道自动包装的方法,请告诉我。
这对我来说适用于 Windows Excel 2016
中的自动换行文本
data.replace( /<br\s*\/?>/ig, "\r") // \r, not \n
并自定义按钮
$('#myTable').DataTable( {
buttons: [
{
extend: 'excelHtml5',
customize: function( xlsx ) {
var sheet = xlsx.xl.worksheets['sheet1.xml'];
// set cell style: Wrapped text
$('row c', sheet).attr( 's', '55' );
}
}
]
});
有关按钮自定义的更多信息:https://datatables.net/reference/button/excelHtml5
我试图在使用 DataTables.
I followed their guide to replace certain things with Regex here: DataTables find and replace during export.[=20 将 excel 导出到 excel 时在 HTML table 中保留使用 <br>
的换行符=]
我可以毫无问题地更换东西。但是我没能用换行符替换 <br>
,使同一单元格中的内容保留换行符。
这是我的JS:
$( document ).ready(function() {
var fixNewLine = {
exportOptions: {
format: {
body: function ( data, column, row ) {
// Strip $ from salary column to make it numeric
return column === 5 ?
// THIS WORKS: data.replace(/test/ig, "blablabla"):
data.replace( /<br\s*\/?>/ig, '"'+"\r\n"+'"' ) :
data;
}
}
}
};
$('#table2excel').DataTable({
dom: 'Bfrtip',
buttons:[
$.extend( true, {}, fixNewLine, {
extend: 'copyHtml5'
} ),
$.extend( true, {}, fixNewLine, {
extend: 'excelHtml5'
} ),
$.extend( true, {}, fixNewLine, {
extend: 'pdfHtml5'
} )
]
});
});
问题出在这一行:
data.replace( /<br\s*\/?>/ig, '"'+"\r\n"+'"' ) :
它保存在 excel 中,只有一对 " "
而不是实际的换行符。
请注意,这也不起作用:
data.replace( /<br\s*\/?>/ig, "\r\n"):
有什么建议吗?
这里有一个类似的线程:Export value with Linebreaks into single cell in Excel. jQuery Datatables 但它已经过时了,因为它已经存在一年了,而且 DataTables 已经更新,"TableTools" 已被 "Buttons" 取代。
替换功能内置于 javascript。也许您想删除引号?
data.replace( /<br\s*\/?>/ig, "\r\n")
在 javascript 解释器中为我工作。
您的格式化函数的调用者可能会删除换行符并将其替换为空格
正确答案是:
data.replace( /<br\s*\/?>/ig, "\n" ) :
但是,打开excel时需要按"wrap text"按钮。 如果有人知道自动包装的方法,请告诉我。
这对我来说适用于 Windows Excel 2016
中的自动换行文本data.replace( /<br\s*\/?>/ig, "\r") // \r, not \n
并自定义按钮
$('#myTable').DataTable( {
buttons: [
{
extend: 'excelHtml5',
customize: function( xlsx ) {
var sheet = xlsx.xl.worksheets['sheet1.xml'];
// set cell style: Wrapped text
$('row c', sheet).attr( 's', '55' );
}
}
]
});
有关按钮自定义的更多信息:https://datatables.net/reference/button/excelHtml5