1

我使用SheetJS将数据导出到excel,看起来像excel本身修复数据。数据下载很好,但是收到这个警告可以吗?我有来自 UI 的 file.xlsx,当我通过 excel 打开它时,我收到一些警告是由 Excel 本身产生的。 截图_5 截图_4

代码:

const download = (url, name) => {
    let a = document.createElement('a')
    a.href = url
    a.download = name
    a.click()

    window.URL.revokeObjectURL(url)
}

function Workbook() {
    if (!(this instanceof Workbook))
        return new Workbook()

    this.SheetNames = []

    this.Sheets = {}
}

function s2ab(s) {
    const buf = new ArrayBuffer(s.length)

    const view = new Uint8Array(buf)

    for (let i=0; i !== s.length; ++i)
        view[i] = s.charCodeAt(i) & 0xFF

    return view
}

export default data => {
    import('xlsx').then(XLSX => {
        const wb = new Workbook()
        const ws = XLSX.utils.json_to_sheet(data)

        wb.SheetNames.push('s')
        wb.Sheets[''] = ws

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

        let url = window.URL.createObjectURL(new Blob([s2ab(wbout)], {type:'application/octet-stream'}))

        download(url, 'import.xlsx')
    })
}
4

3 回答 3

3

工作表名称长度不应超过 31。如果工作表名称的长度超过 31,Microsoft Excel 会出错。

于 2020-04-22T10:27:28.613 回答
2

我这是一个明显的问题,为了解决这个问题,我设置:

 const wbSheetNames = 'Custom Name'
        wb.SheetNames.push(wbSheetNames)
        wb.Sheets[wbSheetNames] = ws
于 2018-02-06T14:08:24.673 回答
0

如果在命名工作表时使用无效字符,Excel 会报同样的错误:\ / ? * [ ] 和 :

于 2020-06-10T12:44:09.887 回答