Google apps script 谷歌电子表格:替代公式
我有一张包含多个公式(很多)的工作表,这些公式引用了另一张工作表。 由于“全部替换”在公式中不起作用,所以我尝试编写一个简单的脚本来执行此操作,但它在最后输出“未知范围名称” 我尝试添加简单的引号,使用带有“=”的setValue和setFormula,但没有成功 代码如下: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
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);
}