Импортировать диапазон из источника с переменным количеством строк?

Я новичок в Googlescript, поэтому извините за мой простой вопрос: я хочу импортировать данные из одной таблицы Google в другую, используя IMPORTRANGE(). Исходный диапазон из исходного googlesheet может иметь от 1 до 6 заполненных строк (переменная), но мой целевой диапазон моего целевого googlesheet должен иметь только непустые строки.

var urlsheet=SpreadsheetApp.getActive().getSheetByName('Enter Report URL');

// the URL of the source Googlesheet is pasted in cell A5 of the target Googlesheet:'Enter Report URL'

var cell20=urlsheet.getRange("A5");

var cellB20value=cell20.getValue();

// then I use the Importrange formula on the cell with the URL and paste it in cell A20 which gives me the importrange of the source sheet

var temptarget=urlsheet.getRange("A20");
    temptarget.setFormula('=IMPORTRANGE('+cellB20value+',"Admin Use Only!A4:U9")');

//Finally, I paste the Importrange from A20 in the last row of my target sheet:

var Creditdetail=SpreadsheetApp.getActive().getSheetByName('Credit_Detail');

var lastrowcredit= Creditdetail.getLastRow()+1;

var finaltarget=Creditdetail.getRange(lastrowcredit,1);

  temptarget.copyTo(finaltarget, {contentOnly:true});

Но это продолжает добавлять 6 строк, которые я просил (от A4 до U9 в исходном листе) ...

Может ли кто-нибудь помочь мне понять, как импортировать только непустые строки?


person danymalibu    schedule 12.06.2019    source источник
comment
Есть ли причина, по которой вы просто не var a = SpreadsheetApp.openByUrl(url).getSheetByName("Admin Use Only").getRange("A4:U9"); var b = SpreadsheetApp.getActive().getSheetByName('Credit_Detail'); b.getRange(b.getLastRow() +1, 1, a.length).setValues(a)?   -  person sinaraheneba    schedule 12.06.2019
comment
Пожалуйста, научитесь редактировать свой формат, как вы выделяете свою проблему.   -  person Hima    schedule 12.06.2019
comment
Привет, @Altigraph, спасибо за уделенное время. Ваше решение выглядит простым. Но когда я запускаю сценарий на b.getRange (b.getLastRow () +1, 1, a.length) .setValues ​​(a), я получаю сообщение об ошибке: «Не удается найти метод getRange (число, число, (класс)) '   -  person danymalibu    schedule 12.06.2019
comment
Используйте обратные кавычки для обозначения форматирования кода. Приведенный выше код должен быть var a = ... getRange("A4:U9").getValues();, попробуйте   -  person sinaraheneba    schedule 12.06.2019
comment
Еще раз спасибо @Altigraph, я запомню обратные кавычки. То, что вы предложили, работает ... Теперь это все еще не решает проблему, поскольку мои две первые строки из моего исходного диапазона (от A4 до U5) заполнены значениями, но мои последние 4 строки (от A6 до U9) заполнены формулами, но без значений . Я хотел бы получить только ячейки из строк, имеющих фактические значения ...   -  person danymalibu    schedule 12.06.2019
comment
Используйте цикл for, var validRows = []; ... if (a[i][0] !== '') { validRows.push(a[i]); } и т. Д.   -  person sinaraheneba    schedule 12.06.2019


Ответы (1)


IMPORTRANGE импортирует все значения, охватываемые ссылкой, указанной в качестве второго аргумента.

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

  • Отфильтруйте данные перед их импортом, т. Е. С помощью FILTER, QUERY и т. Д., Затем используйте ссылку на диапазон, в котором хранятся результаты, или с помощью скрипта Google Apps Script для getValues ​​/ getDisplayValues, а затем выполните фильтрацию с помощью некоторых методов JavaScript, таких как Array.prototype.filter(callback).
  • Отфильтруйте данные после того, как они были импортированы, т. Е. С помощью QUERY, если это будет выполняться по той же формуле, FILTER, если это будет сделано с использованием другой формулы.
person Rubén    schedule 16.06.2019