Это не так уж плохо; вам просто нужно обдумать несколько идей из Apps Script и Javascript, чтобы сделать его эффективным. Но сначала давайте начнем с наивного подхода!
function firstTry() {
var activeSheet = SpreadsheetApp.getActiveSheet(); // whatever is open
var activeCell = SpreadsheetApp.getCurrentCell(); // this is a single-cell range
var activeCellValue = activeCell.getValue(); // could be a string, number, etc
// Now let's look in column B for stuff to change
for (var i = 1; i <= activeSheet.getLastRow(); i++) {
var cell = activeSheet.getRange("B" + i);
var val = cell.getValue();
var valStr = String(val); // We could have gotten a number
if (valStr.indexOf("HR") != -1) {
cell.setValue(activeCellValue);
}
}
}
Это, вероятно, будет работать, но не слишком эффективно: каждый вызов getValue () или setValue () занимает некоторое время. Было бы лучше просто получить все значения сразу, а затем вставить обратно измененный столбец B, когда мы будем удовлетворены:
function improvement() {
var activeSheet = SpreadsheetApp.getActiveSheet(); // whatever is open
var activeCell = SpreadsheetApp.getCurrentCell(); // this is a single-cell range
var activeCellValue = activeCell.getValue(); // could be a string, number, etc
// Now let's look in column B for stuff to change
var rowsWithData = activeSheet.getLastRow() - 1;
var colBRange = activeSheet.getRange(1, // start on row 1
2, // start on column 2
rowsWithData, // this many rows
1); // just one column
// Let's get the data as an array of arrays. JS arrays are 0-based, btw
var colBData = colBRange.getValues();
for (var i = 0; i < colBData.length; i++) {
var val = colBData[i][0]; // row i, first column
var valStr = String(val); // We might have gotten a number
if (valStr.indexOf("HR") != -1) {
colBData[i][0] = activeCellValue; // modify copied data
}
}
// Lastly, write column B back out
colBRange.setValues(colBData);
}
Вы могли бы пойти дальше с причудливой функцией фильтра вместо того, чтобы зацикливаться на данных явно, но это начинает становиться менее ясным.
Предостережения , как указывает OP в комментариях ниже, слепой вызов setValues
, как это, проложит все ваши формулы. Это не было бы ничего сложного, за исключением того, что это включает в себя гиперссылки. Вы могли бы по-настоящему принять участие, позвонив getFormulas
параллельно с getValues
и затем решить, следует ли вызывать setValue
или setFormula
в зависимости от исходного содержимого каждой ячейки.