Я хотел бы разработать сценарий, который позволяет применять ту же функцию в столбце A, обращаясь ко всем строкам ниже (от A1 до A600), что является запросом (Importrange), для которого количество вставляемых строк не фиксировано ( от 1 до 300), поэтому его необходимо вставить перед копированием данных.
Я начал с разработки формулы в ячейке A1, которая работает очень хорошо, но подразумевает копирование блока 600 раз в ячейку, чтобы охватить все строки:
`={Query(IMPORTRANGE('Master Table Projects'!T503,"Impacted Formula!A5:R1000"),"where Col1 is not Null");Query(IMPORTRANGE('Master Table Projects'!T467,"Impacted Formula!A5:R1000"),"where Col1 is not Null");Query(IMPORTRANGE('Master Table Projects'!T15,"Impacted Formula!A5:R1000"),"where Col1 is not Null")}
Как следствие, мне нужно разработать сценарий с циклом, чтобы посмотреть, как применить эту формулу от T1 до T600. Я пробовал это:
function myFunction() {
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var rangeData = sheet.getDataRange();
var lastColumn = rangeData.getLastColumn();
var lastRow = rangeData.getLastRow();
var searchRange = sheet.getRange(2,2, lastRow-1, lastColumn-1);
for (r=1; r<100;r++) {
var sa=(Query(IMPORTRANGE('Master Table Projects'!Tr,"Impacted Formula!A5:R1000"),"where Col1 is not Null"));
ss.getRange(r,1).setValue(sa);
};
Это не работает, так как я получаю предупреждающее сообщение: SyntaxError: missing) после списка аргументов (строка 19, файл Learnings.gs)
Я совсем не эксперт в программировании, но: я полагаю, что моя var sa не настроена должным образом, но я не знаю, как ее исправить. Tr для меня означает от T1 до T600, но, скорее всего, это плохо написано.
Прилагаю изображение результатов, которые я хотел бы получить: ожидаемые результаты
Добавив строку кода, предложенную @ziganotschka
sheet.getRange("A" + sheet.getLastRow()).setValue(sa);
Я получил результаты, прикрепленные к новому изображению, что является хорошим улучшением, потому что отображаются только импортированные строки, в которых есть некоторые результаты для отображения, но: По-прежнему существует проблема перекрытия импортированных данных. И последнюю строку (которая соответствует T999) необходимо удалить вручную, чтобы увидеть некоторые результаты. улучшенный макрос
Если вы нажмете ссылку в таблице, я могу предоставить вам доступ позже, но я не могу поделиться общедоступной ссылкой из-за ограничений моей компании (эта опция заблокирована).
Не могли бы вы помочь мне, исправив эти строки, чтобы они работали?
Благодаря @ziganotschka вот рабочий код:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var limit = ss.getSheetByName('Master Table Projects').getRange("T2").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();
Logger.log(limit);
for (var r=2; r<=limit; r++) {
var sa="=Query(IMPORTRANGE('Master Table Projects'!T"+r+',"Impacted Formula!A5:R1000"),"where Col1 is not Null")';
var firstEmptyRow = sheet.getRange("A1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow()+1;
Logger.log(firstEmptyRow);
sheet.getRange("A" + firstEmptyRow).setValue(sa);
SpreadsheetApp.flush();
}
}
Большое спасибо Иса
IMPORTRANGE
-=IMPORTRANGE(spreadsheet_url, range_string)
, но я не вижуurl
в вашей формуле. - person ziganotschka   schedule 03.07.2020getLastRow()
, как указано в комментарии к моему ответу? В противном случае предоставьте доступ к протоколу образцов. - person ziganotschka   schedule 08.07.2020Master Table Projects
иImpacted Formula
, чтобы найти решение для вашего случая. - person ziganotschka   schedule 09.07.2020sheet.getRange("A2").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow()+1;
наsheet.getRange("A1").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow()+1;
- person ziganotschka   schedule 13.07.2020