Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找包含转义公式的所有单元格'=_Javascript_Google Apps Script_Google Sheets_Escaping_Indexof - Fatal编程技术网

Javascript 查找包含转义公式的所有单元格'=

Javascript 查找包含转义公式的所有单元格'=,javascript,google-apps-script,google-sheets,escaping,indexof,Javascript,Google Apps Script,Google Sheets,Escaping,Indexof,我有一张纸,上面有很多公式,它们都是用'=注释或转义出来的(不确定哪一个术语是准确的)。我现在正试图在没有任何运气的情况下找到并删除“ 我可以算出公式的重写,这只是我挂断电话的位置。我真的不确定…==0)如果这些语句的意思是,那么这是我的第一个问题。但是我确信我的关键字也可能有问题 函数重置公式(表,范围){ 公式=范围。getFormulas(); 对于(var r=0;r

我有一张纸,上面有很多公式,它们都是用
'=
注释或转义出来的(不确定哪一个术语是准确的)。我现在正试图在没有任何运气的情况下找到并删除

我可以算出公式的重写,这只是我挂断电话的位置。我真的不确定
…==0)
如果这些
语句的意思是,那么这是我的第一个问题。但是我确信我的
关键字也可能有问题

函数重置公式(表,范围){
公式=范围。getFormulas();
对于(var r=0;r
说明:
  • 我真的很难在看不到文件本身的情况下调试您的代码,但我认为不值得调试它,而是创建一个新的解决方案,因为您当前的方法没有遵循,即迭代使用
    getRange
    getValue
    setValue
    将耗费大量性能,因此必须重新设计逻辑
您的目标是从“公式”中删除
”=

  • 请记住,这样的公式实际上(如您所说)被注释掉了,这意味着它是一个简单的字符串:
    '=sum(B1)
    。因此,使用不会起作用,因为您感兴趣的值是
    字符串
    ,而不是公式。你需要改用
解决方案: 假设下表包含随机数据:

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

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
。当然,将相关参数添加到函数中

参考文献:


    • 我相信你的目标如下

      • 您要查找公式顶部有
        的公式。这就像
        ”=
      • 您想通过删除
        '
        来用
        =
        替换
        '=
      • 您希望使用谷歌应用程序脚本实现这一点
      在这个答案中,作为另一种方法,我建议使用TextFinder实现您的目标。示例脚本如下所示

      示例脚本:
      • 在这种情况下,“Sheet1”的所有公式中的
        '=
        值将替换为
        =

      • 如果要对电子表格中的所有图纸使用此脚本,还可以使用以下脚本

          SpreadsheetApp
            .getActiveSpreadsheet()
            .createTextFinder("\'\=")
            .matchFormulaText(true)
            .useRegularExpression(true)
            .replaceAllWith("=");
        
      参考:

      我还没有尝试@Tanaike的解决方案,但这就是我今天早些时候想到的。我正在搜索不必要的

      var关键字=“=”

      函数重置公式(工作表、范围值、关键字){
      对于(var r=0;r
      你说得对!
      getFormulas()
      函数只是禁用我刚才复制并试图反转的公式的相反函数的残余。所以我把它去掉了。您的解决方案确实有效,但是,它似乎引起了一些争议!复制公式结果并将其粘贴为静态数据时出错。稍后我会再处理它,看看它是否只是我需要在我的工作表中更改的东西。我没有在我的工作表上发布链接,因为过去有人“斥责”我说这是“糟糕的做法”,我的代码应该足够清晰…@TC76谢谢你的反馈,也谢谢你的尝试。我更新了我的代码。请再查一下。现在应该是100%正确了。
        SpreadsheetApp
          .getActiveSpreadsheet()
          .createTextFinder("\'\=")
          .matchFormulaText(true)
          .useRegularExpression(true)
          .replaceAllWith("=");