Datatables导出Excel时货币符号在价格后,如何设置货币格式?
Datatables导出Excel货币符号位置问题解决方法
你遇到的问题根源在于:前端render方法只是做页面文本格式化,导出Excel时插件会直接把带符号的格式化文本导出,Excel无法将其识别为货币数值,导致符号位置异常。要同时保证前端显示和导出格式正确,需要分开处理前端渲染与导出配置:
1. 前端显示保持正确格式
继续使用你之前的渲染方法,确保页面上货币符号在数值前方,建议在$后加空格优化显示效果:
render: $.fn.dataTable.render.number( ',', '.', 2, '$ ' )
2. 导出Excel时设置数值格式
通过Datatables Buttons插件的exportOptions和customize配置,让导出的Excel单元格识别为货币数值,符号自动前置:
完整示例代码
$('#yourTableId').DataTable({ columns: [ // 其他列配置 { data: 'price', // 替换为你的价格字段名 render: $.fn.dataTable.render.number( ',', '.', 2, '$ ' ) } ], buttons: [ { extend: 'excelHtml5', exportOptions: { columns: [0, 1, 2], // 指定要导出的列索引,替换为你的实际列索引 format: { body: function(data, row, columnIndex) { // 针对价格列提取原始数值(移除货币符号和千分位逗号) if (columnIndex === 2) { // 替换为你的价格列索引 return parseFloat(data.replace(/[$,]/g, '')); } return data; } } }, customize: function(xlsx) { var worksheet = xlsx.xl.worksheets['sheet1.xml']; // 给价格列单元格设置货币样式(假设价格列是C列,对应r^="C") // Excel预定义货币样式ID通常为6,不同版本若有差异可自行调整 $('row c[r^="C"]', worksheet).attr('s', '6'); } } ] });
关键说明
- 提取原始数值:导出时必须传递纯数字给Excel,这样Excel才能识别为数值类型,再通过样式添加货币符号,而非导出带符号的纯文本。
- 自定义Excel样式:通过
customize修改Excel的XML内容,给目标列设置货币样式,既能保证符号前置,又保留数值的可计算性。
若不需要Excel单元格可计算,仅需文本格式的符号前置,也可在format.body里直接返回'$ ' + 原始数值.toFixed(2),但这种方式导出的是文本,无法在Excel中做数值运算,更推荐上面的数值型方案。
内容的提问来源于stack exchange,提问作者koteshwarrao Ravulapally
相关产品推荐
相关产品推荐

