找回密码
 立即注册

QQ登录

只需一步,快速开始

Fiooona
论坛元老   /  发表于:2020-9-22 17:06  /   查看:5626  /  回复:2
用户问题:spreadjs可以在加载excel的时候选择不导入公式但是这个是针对于整个excel的,如何能实现针对特定的公式不导入?
背景:spreadjs不支持跨表公式,但是导入的时候如果选择不导入公式,是能够取到跨表公式最终结果的。
           我想在excel加载的时候,如果公式是跨表公式则直接转换为值,其他公式则正常。
思路: 在excelIo.open方法中可以获取到单元格中的公式及值,新建一个临时的Spread,fromJSON时忽略公式,在正式的表单中遍历所有单元格,匹配到用了跨表格公式的单元格,将其中的公式清空,设置值。
导入有跨表格的公式的Excel,会出现#REF的公式报错:
image.png475029296.png
实现效果如下图所示,在Excel中设置了一些跨表格的公式,和未跨表格的公式:
image.png738662719.png
image.png48369750.png
导入SpreadJS 之后,可以保留普通公式,并将外部引用的公式替换为值:
image.png309676818.png
关键代码:
  1.   excelIo.open(excelFile, function (json) {
  2.             var workbookObj = json;
  3.             var tempspread = new GC.Spread.Sheets.Workbook();
  4.             tempspread.fromJSON(workbookObj,{ignoreFormula: true})
  5.             spread.fromJSON(workbookObj);
  6.             debugger
  7.             for(var i = 0;i< tempspread.getSheetCount();i++){
  8.                 var sheet =tempspread.getSheet(i);
  9.                 var colcount= tempspread.getSheet(i).getColumnCount();
  10.                 var rowcount= tempspread.getSheet(i).getRowCount();
  11.                 for(var j = 0;j<rowcount;j++){
  12.                     for(var  k=0;k<colcount;k++){
  13.                         if(spread.getSheet(i).getFormula(j,k)){
  14.                             //正则匹配 表单中有[数字]这样格式的公式为外部引用
  15.                             if((spread.getSheet(i).getFormula(j,k)).match(/\[\d\]/g)){
  16.                                     var value= tempspread.getSheet(i).getValue(j,k)
  17.                             spread.getSheet(i).setFormula(j,k,null);
  18.                             spread.getSheet(i).setValue(j,k,value);
  19.                             }}}}}}
复制代码


features_workbook_excel-import-export_JavaScript.rar

2.04 KB, 下载次数: 498

组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!

2 个回复

倒序浏览
陌上花开_
注册会员   /  发表于:2021-10-29 09:45:03
沙发
你发的这个案例下面的也没出来
QQ图片20211029094228.png
QQ图片20211029094223.png
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-10-29 11:13:06
板凳
陌上花开_ 发表于 2021-10-29 09:45
你发的这个案例下面的也没出来

上面给出的正则只是匹配[1]这种只有个位数的情况,如果像是[10]这种两位数则无法匹配。可以参考下面的代码修改 image.png180065611.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部