Как можно создать выпадающий список, используя DataValidationBuilder, при этом указывая диапазон данных с использованием относительных ссылок?

Как изменить код для создания выпадающего списка в Google Таблицах, чтобы ссылка на диапазон источника формировалась в относительном виде, вместо абсолютного? Я использую следующий скрипт через DataValidationBuilder: <br/> <br/> <pre><code class="javascript">// Устанавливает выпадающий список в ячейку A1 и требует совпадения значения с
// диапазоном B1:B10, дополняя поле выпадающим списком.
var cell = SpreadsheetApp.getActive().getRange('A1');
var range = SpreadsheetApp.getActive().getRange('B1:B10');
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
cell.setDataValidation(rule);</code></pre> <br/> <br/> и заменяю данные на свои. Однако в результате ссылка на диапазон источника отображается в абсолютном формате.
  • 21 сентября 2024 г. 3:23
Ответы на вопрос 2
В Google Таблицах, когда вы создаете выпадающий список через `DataValidationBuilder` и указываете диапазон данных, это, как правило, интерпретируется как абсолютная ссылка. К сожалению, в API Google Apps Script нет встроенной функции для создания относительных ссылок в контексте создания правил валидации данных, так как ссылки на диапазоны в этот момент по умолчанию преобразуются в абсолютные.

Тем не менее, вы можете использовать некоторые обходные пути. Например, вы можете создать выпадающий список на основе формулы или использовать имя диапазона, если необходимо сохранить относительные ссылки более или менее «относительными». 

Вот один из способов обойти эту проблему, используя именованные диапазоны:

1. В Google Таблицах создайте именованный диапазон для вашего диапазона данных, например, назовите его `MyRange`.
2. Затем измените свой JavaScript код следующим образом:

```javascript
// Устанавливает выпадающий список в ячейку A1 и требует совпадения значения с
// именованным диапазоном 'MyRange', дополняя поле выпадающим списком.
var cell = SpreadsheetApp.getActive().getRange('A1');
var range = SpreadsheetApp.getActive().getRangeByName('MyRange');
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(range).build();
cell.setDataValidation(rule);
```

Таким образом, если у вас есть необходимость использовать относительные ссылки, вы можете просто добавлять или изменять данные в вашем диапазоне `MyRange`, и это будет работать, как вам нужно, без необходимости изменять сам скрипт. 

Но если именованные диапазоны не являются подходящим решением для вас, к сожалению, вам придется использовать абсолютные ссылки в контексте этого скрипта.
Програмно этого сделать нельзя. Покрайней мере на данный момент.
Похожие вопросы