使用xlsxjs导出的excel
- 如果是按文本导出,也即是设置raw:true,结果文件里数字列无法求和,原因是数字是以文本写入excel的,无法通过公式计算,即使是修改了单元格属性为数值;
- 如果是按数字导出,也就是设置raw:false(默认设置),结果对于长串数字,会显示成科学计数法,甚至可能失去精度,原因是:
Excel显示数字时,如果数字大于12位,它会自动转化为科学计数法;如果数字大于15位,它不仅用于科学技术法表示,还会只保留高15位,其他位都变0
解决办法:
1.通过table_to_sheet方法时设置raw:true,
sheet = XLSX.utils.table_to_sheet(document.getElementById(this.container), {
raw: true,
cellDates: true
})
2.获取到sheet对象后打印出sheet对象,
如上图,{t:‘s’ }中 t 指 type ,s 是string缩写
3.如果需要某列的数值型字符串能够求和,就需要上图里遍历sheet,把类型改成{t:‘n’ }n表示number即可;
另外:
我没有使用fileSaverjs做导出,而是使用
let sheetName = 'sheet1',
workBook = {
SheetNames: [sheetName],
Sheets: {
[sheetName]: sheet
}
};
XLSX.writeFile(workBook, `${this.excelName}.xlsx`)
这是我在看xlsxjs文档时看到的api,也好用,遂推荐给大家!