diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc index 3da3511cf1..89cc8828eb 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc @@ -35,6 +35,23 @@ function KohaTable(id_selector, dt_parameters, table_settings, add_filters) { exportColumns = dt_parameters["exportColumns"]; } + const export_format_spreadsheet = { + body: function ( data, row, column, node ) { + var newnode = $(node); + + if ( newnode.find(".noExport").length > 0 ) { + newnode = newnode.clone(); + newnode.find(".noExport").remove(); + } + let trimmed_str = newnode.text().replace( /\n/g, ' ' ).trim(); + const unsafeCharacters = /^[=+\-@\t\r]/; + if ( unsafeCharacters.test(trimmed_str) ){ + trimmed_str = "'" + trimmed_str; + } + return trimmed_str; + } + } + var export_format = { body: function ( data, row, column, node ) { var newnode = $(node); @@ -78,7 +95,7 @@ function KohaTable(id_selector, dt_parameters, table_settings, add_filters) { exportOptions: { columns: exportColumns, rows: exportRows, - format: export_format + format: export_format_spreadsheet }, }, { @@ -100,7 +117,7 @@ function KohaTable(id_selector, dt_parameters, table_settings, add_filters) { exportOptions: { columns: exportColumns, rows: exportRows, - format: export_format + format: export_format_spreadsheet }, } ); diff --git a/koha-tmpl/intranet-tmpl/prog/js/datatables.js b/koha-tmpl/intranet-tmpl/prog/js/datatables.js index 39040059ac..bc173ddfc9 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/datatables.js +++ b/koha-tmpl/intranet-tmpl/prog/js/datatables.js @@ -672,6 +672,23 @@ function _dt_buttons(params){ exportColumns = settings["exportColumns"]; } + const export_format_spreadsheet = { + body: function ( data, row, column, node ) { + var newnode = $(node); + + if ( newnode.find(".noExport").length > 0 ) { + newnode = newnode.clone(); + newnode.find(".noExport").remove(); + } + let trimmed_str = newnode.text().replace( /\n/g, ' ' ).trim(); + const unsafeCharacters = /^[=+\-@\t\r]/; + if ( unsafeCharacters.test(trimmed_str) ){ + trimmed_str = "'" + trimmed_str; + } + return trimmed_str; + } + } + var export_format = { body: function ( data, row, column, node ) { var newnode = $(node); @@ -691,7 +708,7 @@ function _dt_buttons(params){ text: __("Excel"), exportOptions: { columns: exportColumns, - format: export_format + format: export_format_spreadsheet }, }, { @@ -699,7 +716,7 @@ function _dt_buttons(params){ text: __("CSV"), exportOptions: { columns: exportColumns, - format: export_format + format: export_format_spreadsheet }, }, {