как то непонятно Вы описали свою проблему. В частности для меня не понятны фразы:
"строка пытается втиснуться в эти 2, пустых столбца"
"принудительно писать с первого столбца"
"выгрузки файла"
Опишите пожалуйста подробнее смысл этих фраз.
Sergey В., Первые две ячейки пустые A1, B1, A2,B2. Но если они пустые, google shhets считает, что таблица начинается с F1 и до G2. то есть писать третью строку начинает с F3, а надо, чтобы писало с A3.
не могу использовать range = Лист1!A:A Так как A столб может быть пустым, и попытается записать после последнего заполненного, а надо, чтобы учитывал заполнение до H столба.
для определения диапазона занятых ячеек есть функция getDataRange()
С её помощью можно определить начало/конец диапазона занятых ячеек.
Возможно это то, что Вам нужно.
aspirantes, при вызове getDataRange() данные не выгржаются, скорость выполнения будет одинакова для больших или малых таблиц. Вот если Вы вызовете getValues(), то это уже повлечёт выгрузку данных в память.
Кто писать, когда писать, как писать? Причем тут API? Указывайте диапазон правильно и все будет нормально. Да, начало Таблицы считается с первой заполненной колонки. Это нормально! Является особенностью вообще табличных процессоров.