SpreadJS 如何导入跨表公式,保留值忽略错误公式
用户问题:spreadjs可以在加载excel的时候选择不导入公式但是这个是针对于整个excel的,如何能实现针对特定的公式不导入?背景:spreadjs不支持跨表公式,但是导入的时候如果选择不导入公式,是能够取到跨表公式最终结果的。
我想在excel加载的时候,如果公式是跨表公式则直接转换为值,其他公式则正常。
思路: 在excelIo.open方法中可以获取到单元格中的公式及值,新建一个临时的Spread,fromJSON时忽略公式,在正式的表单中遍历所有单元格,匹配到用了跨表格公式的单元格,将其中的公式清空,设置值。
导入有跨表格的公式的Excel,会出现#REF的公式报错:
实现效果如下图所示,在Excel中设置了一些跨表格的公式,和未跨表格的公式:
导入SpreadJS 之后,可以保留普通公式,并将外部引用的公式替换为值:
关键代码:
excelIo.open(excelFile, function (json) {
var workbookObj = json;
var tempspread = new GC.Spread.Sheets.Workbook();
tempspread.fromJSON(workbookObj,{ignoreFormula: true})
spread.fromJSON(workbookObj);
debugger
for(var i = 0;i< tempspread.getSheetCount();i++){
var sheet =tempspread.getSheet(i);
var colcount= tempspread.getSheet(i).getColumnCount();
var rowcount= tempspread.getSheet(i).getRowCount();
for(var j = 0;j<rowcount;j++){
for(vark=0;k<colcount;k++){
if(spread.getSheet(i).getFormula(j,k)){
//正则匹配 表单中有[数字]这样格式的公式为外部引用
if((spread.getSheet(i).getFormula(j,k)).match(/\[\d\]/g)){
var value= tempspread.getSheet(i).getValue(j,k)
spread.getSheet(i).setFormula(j,k,null);
spread.getSheet(i).setValue(j,k,value);
}}}}}}
你发的这个案例下面的也没出来
陌上花开_ 发表于 2021-10-29 09:45
你发的这个案例下面的也没出来
上面给出的正则只是匹配这种只有个位数的情况,如果像是这种两位数则无法匹配。可以参考下面的代码修改
页:
[1]