Google电子表格:替代公式

时间:2014-01-06 13:18:31

标签: google-apps-script google-sheets

我有一张包含多个公式(很多很多)的工作表引用另一个工作表。 由于“替换所有”在公式中不起作用,我试图制作一个简单的脚本来完成它,但它最后会输出“未知范围名称”。

我尝试添加简单的引号,使用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);
       }
    }
  }
}

2 个答案:

答案 0 :(得分:0)

你当然需要setFormula()。这似乎对我有用(我重组了一下以获得并将公式设置为批处理,这应该会提供更好的性能):

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);
}

答案 1 :(得分:0)

这是您可以做的,以保持所有公式的值并删除公式。这样你就可以使用它所引用的标签。

  1. 重复选项卡(因此,如果您仍然需要该格式,请不要使用公式吹出原始文件)
  2. 选择重复选项卡上的所有单元格并复制
  3. 所有单元格仍处于选中状态仅从编辑下拉列表中粘贴特殊值
  4. 值保持不变,公式消失。然后你可以复制到其他工作簿等我知道这很简单

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

    祝你好运

    布鲁斯