use*_*510 6 javascript excel datatables export-to-excel tabletools
我正在使用Datatables TableTools插件,以便为我页面上的表提供"导出到Excel"选项.
一般来说,一切都按预期工作.我唯一的问题是我需要所有数据.生成的Excel表格中的列被格式化为文本,否则我将丢失某些列中的数据.
示例:
- 我有一个具有前导零(例如0022
)的列,22
如果未将其格式化为文本,则只会在Excel文件中显示前导零(例如).- 另一列包含19位帐号(例如1234567890123456789
),1234567890123450000
如果未将其格式化为文本,则最后四位数字将在Excel文件中更改为零(例如).
有没有什么办法可以在我的Datatables/TableTools初始化中设置它,以便它总是将所有数据作为文本导出到Excel文件中?
蒂姆,非常感谢你提供的任何帮助.
小智 15
我尝试了Aureltime给出的第一个选项,但我发现了一点副作用.如果列仅包含数字并且您使用渲染功能,则排序选项不起作用.希望从1.10.12 datatables版本开始,有一个新选项可以在创建excel文件之前自定义数据.
在这个自定义功能中,我添加了/ u002C,它工作完美,甚至是数字的排序.
"buttons": [{
extend: 'excel',
exportOptions: {
orthogonal: 'sort'
},
customizeData: function ( data ) {
for (var i=0; i<data.body.length; i++){
for (var j=0; j<data.body[i].length; j++ ){
data.body[i][j] = '\u200C' + data.body[i][j];
}
}
}
}],
Run Code Online (Sandbox Code Playgroud)
我有这个问题的解决方案。
很多时候我的头都碎了……所以解释如下:
在以下行中搜索,直到获取此代码,并对其进行注释:
cells.push( typeof row[i] === 'number' || (row[i].match && $.trim(row[i]).match(/^-?\d+(\.\d+)?$/) && row[i].charAt(0) !== '0') ?
'<c t="n"><v>'+row[i]+'</v></c>' :
'<c t="inlineStr"><is><t>'+(
! row[i].replace ?
row[i] :
row[i]
.replace(/&(?!amp;)/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, ''))+ // remove control characters
'</t></is></c>' // they are not valid in XML
);
Run Code Online (Sandbox Code Playgroud)把这个新代码:
cells.push( '<c t="inlineStr"><is><t>'+(
! row[i].replace ?
row[i] :
row[i]
.replace(/&(?!amp;)/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g, ''))+ // remove control characters
'</t></is></c>' // they are not valid in XML
);
Run Code Online (Sandbox Code Playgroud)保存您的 datatables.js
此解决方案有助于维护数字、日期和十进制格式。
我更改了代码以强制以文本格式将所有值从 HTML 写入 XLSX。
如果有人对此解决方案有疑问,我将尝试回答所有问题。
谢谢大家。
TableTools 不会创建真正的 excel
文件,而是创建一个csv
文件。这些仅包含原始数据,没有格式。尽管存在前导零,但 Excel 通常不会显示它们。您在这里有多种选择:
csv
文件,您应该能够将列标记为文本(您可能需要将文件类型更改为txt
) 归档时间: |
|
查看次数: |
22114 次 |
最近记录: |