美文网首页
Vue(Quasar)项目前端Excel导出/导入

Vue(Quasar)项目前端Excel导出/导入

作者: 繁梦人生 | 来源:发表于2020-08-14 13:41 被阅读0次

    安装依赖

    FileSaver.js 是客户端保存文件的解决方案。
    Xlsx.js 是生成Excel的解决方案。

    npm install --save file-saver xlsx
    

    引入

    在需要使用的 Vue 页面引入。

    import FileSaver from 'file-saver'
    import XLSX from 'xlsx'
    

    实际例子

    以 json 格式的对象数组导出 Excel 为例,编写如下通用方法:

    function exportJson2Excel (data, fileName, sheetName) {
      const sheet = XLSX.utils.json_to_sheet(data)
      FileSaver.saveAs(new Blob([sheet2Blob(sheet, sheetName)], { type: 'application/octet-stream;charset=utf-8' }), fileName)
    }
    
    function sheet2Blob (sheet, sheetName) {
      sheetName = sheetName || 'sheet1'
      const workbook = {
        SheetNames: [sheetName],
        Sheets: {}
      }
      workbook.Sheets[sheetName] = sheet
      // 生成excel的配置项
      const wopts = {
        bookType: 'xlsx', // 要生成的文件类型
        bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
        type: 'binary'
      }
      const wbout = XLSX.write(workbook, wopts)
      const blob = new Blob([string2ArrayBuffer(wbout)], { type: 'application/octet-stream' })
      return blob
    }
    
    // 字符串转ArrayBuffer
    function string2ArrayBuffer (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 buf
    }
    

    示例调用代码:

    const jsonData = [{ 姓名: 'Tom', 年龄: 18, 身份证号: '0102' }, { 姓名: '张三', 年龄: 210204199901212290, 身份证号: '210204199901212290' }]
    exportJson2Excel(jsonData, '示例.xlsx')
    

    同理,一个简单的导入实现方法如下,读取Excel数据并转换成json格式:

    function importExcel2Json (file, callback) {
      const reader = new FileReader()
      reader.onload = function (e) {
        const workbook = XLSX.read(e.target.result, { type: 'binary' })
        if (callback) callback(XLSX.utils.sheet_to_json(workbook.Sheets[workbook.SheetNames[0]], { defval: '' }))
      }
      reader.readAsBinaryString(file)
    }
    

    参考

    本例仅使用了 XLSX 中的 json_to_sheet 方法,更多功能可参考官网或相关网站。
    Xlsx
    https://www.cnblogs.com/liuxianan/p/js-excel.html
    https://github.com/SheetJS/sheetjs
    https://github.com/DonNicoJs/vue-xlsx
    https://www.jianshu.com/p/6b873a26131d
    FileSaver
    https://blog.csdn.net/qq_30671099/article/details/104052782

    相关文章

      网友评论

          本文标题:Vue(Quasar)项目前端Excel导出/导入

          本文链接:https://www.haomeiwen.com/subject/mplgdktx.html