js导出的xlsx无法打开_使用FileSaver、js-xlsx实现excel导出

需要将页面上的表格内容导出成excel格式。

使用了FileSaver、js-xlsx的前端插件。

files: [

vendor_path('file-saver/FileSaver.min.js'),

vendor_path('js-xlsx/dist/xlsx.core.min.js'),

]

FileSaver、js-xlsx的github,支持的版本类型,和使用方法。

js-xlsx:

datenum = (v, date1904) ->

if date1904

v += 1462

epoch = Date.parse(v)

return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000)

sheetFromArrayOfArrays = (data) ->

ws =

# 设置每一列的宽度(12个字符)

'!cols': ({wch: 12} for i in _.range(data[0].length))

range =

s:

c: 10000000

r: 10000000

e:

c: 0

r: 0

R = 0

while R != data.length

C = 0

while C != data[R].length

if range.s.r > R

range.s.r = R

if range.s.c > C

range.s.c = C

if range.e.r < R

range.e.r = R

if range.e.c < C

range.e.c = C

cell = v: data[R][C]

if cell.v == null

++C

continue

cell_ref = XLSX.utils.encode_cell(

c: C

r: R)

if typeof cell.v == 'number'

cell.t = 'n'

else if typeof cell.v == 'boolean'

cell.t = 'b'

else if cell.v instanceof Date

cell.t = 'n'

cell.z = XLSX.SSF._table[14]

cell.v = datenum(cell.v)

else

cell.t = 's'

ws[cell_ref] = cell

++C

++R

if range.s.c < 10000000

ws['!ref'] = XLSX.utils.encode_range(range)

return ws

s2ab = (s) ->

buf = new ArrayBuffer(s.length)

view = new Uint8Array(buf)

for i in _.range(s.length)

view[i] = s.charCodeAt(i) & 0xFF

return buf

FileSaver:

filename = "ge.xlsx"

wb =

SheetNames: []

Sheets: {}

ws = sheetFromArrayOfArrays(data)

sheet_name = "ge"

wb.SheetNames.push sheet_name

wb.Sheets[sheet_name] = ws

if wb.SheetNames.length == 0

return showErr()

wbout = XLSX.write(wb, {bookType: 'xlsx', bookSST: true, type: 'binary'})

saveAs(new Blob([s2ab(wbout)], {type: "application/octet-stream"}), filename)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值