Google apps script 谷歌电子表格:替代公式

Google apps script 谷歌电子表格:替代公式,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一张包含多个公式(很多)的工作表,这些公式引用了另一张工作表。 由于“全部替换”在公式中不起作用,所以我尝试编写一个简单的脚本来执行此操作,但它在最后输出“未知范围名称” 我尝试添加简单的引号,使用带有“=”的setValue和setFormula,但没有成功 代码如下: function changeFormula() { var strToFind = "DB!"; var strToReplace = "'DB2'!"; var range = SpreadsheetApp

我有一张包含多个公式(很多)的工作表,这些公式引用了另一张工作表。 由于“全部替换”在公式中不起作用,所以我尝试编写一个简单的脚本来执行此操作,但它在最后输出“未知范围名称”

我尝试添加简单的引号,使用带有“=”的setValue和setFormula,但没有成功

代码如下:

function changeFormula() {
  var strToFind = "DB!";
  var strToReplace = "'DB2'!";
  var range = SpreadsheetApp.getActiveSheet().getActiveRange();
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  for (var i = 1; i <= numRows; i++) {
    for (var j = 1; j <= numCols; j++) {
       cell = range.getCell(i,j);
       var currentFormula = cell.getFormula();

       if (currentFormula.indexOf(strToFind) > 0 )
       {
         var newFormula = currentFormula.replace(strToFind,strToReplace); //currentFormula + " string";
         cell.setValue("\'" + newFormula + "\'");
         cell.setValue("="+ cell.getValue().substring(1,cell.getValue().length-1))
         //cell.setValue(newFormula);
       }
    }
  }
}
函数更改公式(){
var strToFind=“DB!”;
var strToReplace=“'DB2'!”;
var range=SpreadsheetApp.getActiveSheet().getActiveRange();
var numRows=range.getNumRows();
var numCols=range.getNumColumns();

对于(var i=1;i您肯定需要setFormula()。这对我来说似乎很有效(我重新构造了一点,以获得并将公式设置为一个批处理,这将提供更好的性能):

函数更改公式()
{
var strToFind=“DB!”;
var strToReplace=“'DB2'!”;
var range=SpreadsheetApp.getActiveSheet().getActiveRange();
var formulas=range.getFormulas();
对于(var i=0;i-1)
{
公式[i][j]=公式[i][j]。替换(strofind,strToReplace);
}
}
}
范围。设置公式(公式);
}

这是您可以保留所有公式的值并删除公式的方法。这样,您就可以将工作表从其引用的选项卡中删除

  • “重复”选项卡(这样您就不会用公式吹出原始内容,以防您仍然需要该格式的内容)
  • 选择“复制”选项卡上的所有单元格并复制
  • 所有单元格仍处于选中状态时,仅从“编辑”下拉列表中粘贴特殊值
  • 值保留,公式消失。然后你可以复制到其他工作簿等。我知道这很简单

    我不确定这是否是你所需要的,但这正是我所需要的,我想我会为你或其他任何可能像我一样走过的人分享

    祝你好运


    Bruce也尝试了这个脚本,但没有成功:谢谢你的解决方案。与此同时,我将电子表格移到了新版本的google电子表格中,它允许查找/替换单元格中的公式。我尝试了(在新的电子表格版本中)它似乎可以工作,但只替换了strToReplace中strToFind的第一个实例,它有多个对strToFind的引用。建议使用
    .replace(/strToFind/g,strToReplace)
    (from)
    function changeFormula()
    {
      var strToFind = "DB!";
      var strToReplace = "'DB2'!";
      var range = SpreadsheetApp.getActiveSheet().getActiveRange();
      var formulae = range.getFormulas();
      for (var i = 0; i < formulae.length; i++) 
      {
        for (var j = 0; j < formulae[0].length; j++)
        {
           if (formulae[i][j].indexOf(strToFind) > -1)
           {
             formulae[i][j] = formulae[i][j].replace(strToFind, strToReplace);
           }
        }
      }
      range.setFormulas(formulae);
    }