Если вы используете getActiveCell()
, ваш рабочий процесс выглядит следующим образом:
- выберите ячейку
- выполните функцию для обновления этой отдельной ячейки
Чтобы использовать один и тот же рабочий процесс при выборе нескольких ячеек, вы хотите использовать Spreadsheet.getActiveRangeList()
метод . Это позволит вам взаимодействовать со списком всех выбранных в данный момент диапазонов. Это будет работать во всех следующих случаях:
- выбор отдельной ячейки
- выбор диапазона смежных ячеек
- выбор нескольких диапазонов смежных ячеек (т.е. использование CTRL + щелчок левой кнопкой мыши)
// Use a global constant to ease editing the value should the URL need to be changed.
var URL_PREFIX = 'http://url/?param1=value1¶m2=';
function setCustomLinks() {
var activeSheet = SpreadsheetApp.getActiveSheet();
var ranges = activeSheet.getActiveRangeList().getRanges();
// Loop through the ranges.
for (var i = 0; i < ranges.length; i++) {
// Get all cell values of the range into a 2D array.
var values = ranges[i].getValues();
// Loop through the 2D array of values.
for (var j = 0; j < values.length; j++) {
for (var k = 0; k < values[j].length; k++) {
// Replace each value with a hyperlink formula.
values[j][k] = createCustomLink(values[j][k]);
}
}
// Set the cell values using the new values.
ranges[i].setValues(values);
}
}
function createCustomLink(value) {
var url = URL_PREFIX + value;
return '=HYPERLINK("' + url + '", "' + value + '")';
}
Еще одним преимуществом этого подхода является использование пакетных операций для получения / установки каждого диапазона значений в одном вызове метода. Это делает его намного быстрее при работе с большим диапазоном и является одной из документированных лучших практик .