我有一张包含多个公式(很多很多)的工作表引用另一个工作表。 由于“替换所有”在公式中不起作用,我试图制作一个简单的脚本来完成它,但它最后会输出“未知范围名称”。
我尝试添加简单的引号,使用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);
}
}
}
}
答案 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)
这是您可以做的,以保持所有公式的值并删除公式。这样你就可以使用它所引用的标签。
值保持不变,公式消失。然后你可以复制到其他工作簿等我知道这很简单
不确定这是否是你所需要的,但这正是我所需要的,我想我会为你或其他任何可能像我一样徘徊的人分享。
祝你好运布鲁斯