首页 > 解决方案 > 查找所有带有转义公式的单元格 '=

问题描述

我有一张表,其中包含许多已被注释或转义的公式(不确定哪个术语,如果有的话是准确的)'=。我现在正试图找到并删除'没有任何运气。

我可以弄清楚公式的重写,它只是'=我挂断的位置。我不太确定... == 0)这些陈述的部分是什么if意思,所以这是我的第一个问题。但我敢肯定我的也可能有问题keyword

function resetFormula(sheet, range) {
  formulas = range.getFormulas();

  for (var r = 0; r < formulas.length; r++) {
    for (var c = 0; c < formulas[r].length; c++) {
      var formula = formulas[r][c];
      var value = sheet.getRange(r + 1, c + 1).getValue();
      var value = value + "";
      // var keyword = "'="; // no results
      // var keyword = "'"; // finds all cells with '.  Not that BEGIN with '
      var keyword = "'\="; // no results

      if (formula.indexOf(keyword) == 0) {
        console.log("(formula.indexOf(keyword) == 0)");
        console.log("formula = " + formula);
        // sheet.getRange(r + 1, c + 1).setFormula(formula);
      } else {
        if (value.indexOf(keyword) == 0) {
          console.log("(value.indexOf(keyword) == 0)");
          console.log("value = " + value);
          // sheet.getRange(r + 1, c + 1).setValue(value);
        }
      }
    }
  }
}

标签: javascriptgoogle-apps-scriptgoogle-sheetsescapingindexof

解决方案


解释:

  • 在无法查看文件本身的情况下调试您的代码对我来说真的很困难,但我认为不值得调试它而是创建一个新的解决方案,因为您当前的方法不遵循最佳实践,即迭代使用getRangegetValue并且setValue会花费你很多性能,因此你将不得不重新设计你的逻辑。

您的目标是'=从“公式”中删除。

  • 请记住,这样的公式实际上(如您所说)已被注释掉,这意味着它是一个简单的字符串:'=sum(B1)。因此,使用getFormulas是行不通的,因为您感兴趣的值是strings而不是公式。您需要改用getValues

解决方案:

假设以下表格带有随机数据:

在此处输入图像描述

以下脚本将从'包含它的每个单元格中删除:

function myFunction1() {
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getSheetByName("Sheet1");
  const charToDel = "'=";
  const range = sh.getDataRange();
  const [values, formulas] = [range.getValues(),range.getFormulas()];

  const new_vals=formulas.map((r,i)=>r.map((c,j)=>c==''?values[i][j]:c.toString().
                               includes(charToDel)?c.replace(charToDel,''):c));
  range.setValues(new_vals);
}

执行脚本后的结果将是相关单元格中的公式:

在此处输入图像描述

边注:

我认为更改我的代码以适应您的逻辑非常简单。而不是sh使用sheet和删除range,因为它是由函数传递的。当然在函数中添加相关参数。

参考:


推荐阅读