только содержимое скрипта apps для получения значений

#google-apps-script #google-sheets

#google-apps-script #google-sheets

Вопрос:

У меня есть следующее, которое работает нормально:

 function phototable() {
  var ss = SpreadsheetApp.openById('####');
  var lastRow = ss.getLastRow();
  ss.getRange('H' lastRow)
  .setValue('=VLOOKUP("Form Responses_Images/"amp;B' lastRow ',importrange("https://docs.google.com/spreadsheets/d/####/edit","Form Responses!U:Z"),4,false)');
}
  

Однако я не хочу, чтобы формула копировалась в столбец H , только фактическое значение. Итак, я попытался:

 ss.getRange('H' lastRow)
  .getValue('=VLOOKUP("Form Responses_Images/"amp;B' lastRow ',importrange("https://docs.google.com/spreadsheets/d/###/edit","Form Responses!U:Z"),4,false)')
  .copyTo('H' lastRow,{contentsOnly:true});
  

Но это ничего не вставляет в столбец H. Есть идеи?

Ответ №1:

Точки модификации:

  • О I have the following that works fine: , когда я увидел приведенный выше сценарий, я думаю, что ошибка возникает на getValue . Потому getValue что не имеет аргументов. Я так и думал getValue setValue .
  • При copyTo('H' lastRow,{contentsOnly:true}) этом 1-м аргументом является объект диапазона.
  • Для того, чтобы скопировать результат формулы во время выполнения скрипта в виде строки, требуется использовать flush .

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

Модифицированный скрипт:

 function phototable() {
  var ss = SpreadsheetApp.openById('####');
  var lastRow = ss.getLastRow();
  var range = ss.getRange('H' lastRow);
  range.setValue('=VLOOKUP("Form Responses_Images/"amp;B' lastRow ',importrange("https://docs.google.com/spreadsheets/d/###/edit","Form Responses!U:Z"),4,false)');
  SpreadsheetApp.flush();
  range.copyTo(range, {contentsOnly:true});
}
  

Примечание:

  • В вашем скрипте ss это 1-я вкладка электронной таблицы. Пожалуйста, будьте осторожны с этим.

Ссылки:

Ответ №2:

Проблемы / Объяснение:

У вас есть 2 способа обновить ячейку в столбце H значением формулы:

  1. Если вы хотите обновить ячейку в H с ее значением, затем получите значение и установите его обратно:

     range.setValue(range.getValue());
      
  2. Используйте метод CopyTo():

     range.copyTo(range, {contentsOnly:true});
      

В качестве дополнительной информации CopyTo() нельзя использовать, если исходный диапазон и целевой диапазон не относятся к одному и тому же файлу электронной таблицы.

  • Поскольку этот процесс происходит очень быстро, рекомендуется использовать flush() для завершения ожидающих изменений в таблице.

Решение:

 function phototable() {
  var ss = SpreadsheetApp.openById('####').getSheetByName('Sheet1');
  var lastRow = ss.getLastRow();
  var range = ss.getRange('H' lastRow);
  range.setValue('=VLOOKUP("Form Responses_Images/"amp;B' lastRow ',importrange("https://docs.google.com/spreadsheets/d/####/edit","Form Responses!U:Z"),4,false)');
  SpreadsheetApp.flush();
  range.setValue(range.getValue());
  // range.copyTo(range, {contentsOnly:true}); // choose this or the previous line
}
  

Измените Sheet1 на имя листа, к которому вы хотите применить эту операцию.

  • Также лучше выбрать конкретный лист, прежде чем применять к нему какую-либо функцию. Чтобы получить лист по его имени, используйте getSheetByName().