Мне пришлось написать пользовательскую функцию. Вот. Но я надеялся на наличие нативного API для такой часто используемой части функциональности. Я бы сказал, что он часто используется.
export const get_nonempty_range_down = async (startingCell, context) => {
const distanceLimit = 999;
const rangeToTest = startingCell.getResizedRange(distanceLimit, 0);
rangeToTest.load("values");
await context.sync();
const matrixValues = rangeToTest.values;
let finalCellPosition = null;
matrixValues.some((row, i) => {
if (row[0] === "") {
finalCellPosition = i - 1;
return true;
}
return false;
});
const result = startingCell.getResizedRange(finalCellPosition, 0);
// Debug
// result.load("address");
// await context.sync();
// console.log(result.address);
return result;
};
И оно все еще несовершенно, поскольку пересекает только тысячу клеток вниз. Хорошо для моих нужд, но не полное решение.