• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

我的博客我做主

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

vue3.x 中使用 XLSX 提取 excel 工作表中的公式

最近在做关于Excel 导入的项目,后端太忙了,前端先处理excel公式,我使用 XLSX 这个npm 包来处理,希望是个不错的选择!

第一步 安装 npm install XLSX  或者 yarn add XLSX , 我使用的是后者!

第二步 写好上传 的按钮 ,这里使用的是element-ui plus 的组件 el-upload,代码如下:

1 <el-upload
2     action=""
3     :auto-upload="true"
4     :before-upload="readExportExcelFile"
5 >
6     <el-button type="primary">上传报表模板</el-button>
7 </el-upload>

第三步:实现  readExportExcelFile  方法:

// 点击导入excel, 获取excel的表(sheet )
const readExportExcelFile = (file)=>{
    /* 读取Excel */
    const reader = new FileReader();
    reader.onloadstart = (e)=>{
        loading.value = e.target.readyState
    }
    reader.onprogress = (e)=>{
        loading.value = e.target.readyState
    }
    reader.onload = (e) => {
        /* 解析数据 */
        const bstr = e.target.result;
        workbook.value = XLSX.read(bstr, { type: 'binary'}); // 缓存 excel 解析内容
        sheets.value =  workbook.value.SheetNames; // 获取 缓存 excel 中所有表 (sheet )
        proxy.$modal.msgSuccess("导入成功!")
    }
    reader.onloadend = (e)=>{
        loading.value = e.target.readyState
    }
    reader.onerror = (e) =>{
        proxy.$modal.msgError("文件读取时发生错误!")
    }
    reader.readAsBinaryString(file);
    return false;
}

就这样,就成功拿到了excel 表中拿到workbook 和 sheets 数据啦!

第四部 获取 某个sheet 中的公式  wsname 参数表示sheet 名称

XLSX.utils.sheet_to_formulae 提取公式
MatchExcelFormulaReg 正在表达式过滤出有效的公式
 1 const MatchExcelFormulaReg = /^([A-Z]+\d+=)(?!(\'|\d))./g // 排除 数据报表模板公式中的 中文和数值,中文是以 ' 开头的
 2 // 选择某个表(sheet ),获取表中公式(formulae)
 3 const getFormulae = (wsname)=>{
 4     if(workbook.value){
 5         const ws =  workbook.value.Sheets[wsname];
 6         let sheetToFormulae = XLSX.utils.sheet_to_formulae(ws) // 提取公式
 7         const formulae = sheetToFormulae.filter(z=>z.match(MatchExcelFormulaReg)) // 过滤出需要的公式,例如:A3=A1+A2
 8         return formulae
 9     }
10 } 

这样提取公式的目的就达到了!

在这个功能开发过程中经常需要用到正则!我也因此不得不学会写一些正则,有收获!

 

 

 


作者:kitty20180903suzhou
出处:https://www.cnblogs.com/kitty-blog/
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

posted on 2022-07-04 17:03  kitty20180903suzhou  阅读(1134)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3