有没有办法从我的谷歌脚本中排除包含公式的单元格



很抱歉已经有人问过了,但如果有人能给我指明正确的方向,那就太好了。我已经为此寻找了几个版本/解决方案,但似乎找不到(我可能找错地方了(。

基本上,我正在寻找一种方法,从下面的脚本中排除任何包含公式的单元格。所以我只想让它在精确匹配"1"的单元格上运行。如有任何帮助,我们将不胜感激。

function runReplaceInSheet(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("2020");
//  get the current data range values as an array
var values = sheet.getDataRange().getValues();  
// Replace 1 with HOL
replaceInSheet(values, "1", "HOL");
// Write all updated values to the sheet, at once
sheet.getDataRange().setValues(values);
}
function replaceInSheet(values, to_replace, replace_with) {
//loop over the rows in the array
for(var row in values){
//use Array.map to execute a replace call on each of the cells in the row.
var replaced_values = values[row].map(function(original_value) {
return original_value.toString().replace(to_replace,replace_with);
});
//replace the original row values with the replaced values
values[row] = replaced_values;
}
}

流量:

  • getFormula并仅在公式数组为空时替换

示例脚本:

function replace(sheetName = '2020', searchValue = '1', replaceValue = 'HOL') {
const sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
const range = sheet.getDataRange();
const formulas = range.getFormulas();
const values = range.getValues();
range.setValues(
formulas.map((row, i) =>
row.map(
(formula, j) =>
formula || values[i][j].toString().replace(searchValue, replaceValue)
)
)
);
}

您可以使用getFormulas()方法来获取当前shet中的所有公式,并像2d数组一样迭代它们。

var values = sheet.getDataRange().getDisplayValues();  
var formulas = sheet.getDataRange().getFormulas();  
for (var r=0; r<values.length; r++) {
for (var c=0; c<values[r].length; c++) {
var cellValue = values[r][c];
var formula = formulas[r][c];
if (!formula && cellValue === "1") {
sheet.getRange(r+1, c+1).setValue("HOL")
}
}
}

最新更新