Индекс преобразования соответствует формуле Google Sheets и скрипту Apps

Мне нужно индексировать совпадения на основе двух столбцов и установить значения Data!I1:I в столбец Tab N.

=arrayformula(iferror( vlookup( G1:G & H1:H,{Data!G1:G&Data!H1:H,Data!I1:I},2,false)))

Демонстрация рабочего листа

Формула работает, но мне нужно преобразовать ее в скрипт Google Apps.

Я попробовал, но получаю ошибку. searchRow не является функцией.

const mainData = ss.getSheetByName("Data");
const tab = ss.getSheetByName("Tab");
const searchValues = mainSS.getRange("G1:H").getValues();
const targetMatch = tab.getRange("G1:H").getValues();                
const matching = searchValues.map(searchRow =>{
const matchRow = targetMatch.find(r => r[0] == searchRow([0]))
return matchRow ? [matchRow([2])] : [null];
})
targetMatch.getRange("N1:N").setValues(matching);

В чем вопрос? Что мешает вам написать функцию в Google Apps Script самостоятельно?

Wicket 12.07.2024 00:17

Я понимаю, чего ты хочешь. Помните, что это не то место, где можно просить других выполнить работу за вас. Сообщения на этом сайте должны содержать вопросы и ответы. Вопрос должен касаться практической, подробной проблемы, уникальной для программирования. Ссылка. тур. Какая из ваших практических и детальных проблем, уникальных для программирования, мешает вам получить то, что вы ищете? Если вы не знаете, с чего начать, начните с чтения developers.google.com/apps-script/guides/sheets .

Wicket 12.07.2024 00:21

Вопрос обновлен сейчас.

Jebra 12.07.2024 00:37

Я думаю, что =arrayformula(iferror(vlookup(G1:G & H1:H,Tab!G1:G&Tab!H1:H,Tab!I1:I},2,false))) это неправильно. Итак, я беспокоюсь, что вы ошиблись в формуле. Можете ли вы подтвердить это еще раз?

Tanaike 12.07.2024 01:29

Спасибо за ответ. Что касается formula is currect, когда вы поместили формулу показа =arrayformula(iferror(vlookup(G1:G & H1:H,Tab!G1:G&Tab!H1:H,Tab!I1:I},2,false))) в ячейку, какой результат вы получили? Я думаю, что в вашей формуле только один }, и он некорректно закодирован. Поэтому я беспокоюсь, что вы могли ошибиться. Приношу извинения за эту ситуацию.

Tanaike 12.07.2024 01:53

Да вы правы. Сейчас он обновлен.

Jebra 12.07.2024 02:06

Спасибо за ответ. Из вашего обновленного вопроса я предложил ответ. Пожалуйста, подтвердите это. Если я неправильно понял ваш вопрос, прошу прощения.

Tanaike 12.07.2024 02:22
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
7
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашей ситуации как насчет следующей модификации?

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

  • В вашем сценарии вместо const matchRow = targetMatch.find(r => r[0] == searchRow([0]))searchRow([0]) должно быть searchRow[0]. Это причина вашего текущего выпуска searchRow is not a function..
  • Кроме того, на return matchRow ? [matchRow([2])] : [null];matchRow([2]) должно быть matchRow[2]. Но у targetMatch есть 2 столбца из const targetMatch = tab.getRange("G1:H").getValues();. Итак, в этом случае возвращается неопределенное значение.
  • Я предполагаю, что в вашей ситуации, когда объект для поиска значений создается вне цикла, стоимость процесса может быть снижена.

Когда эти моменты будут отражены в сценарии, как насчет следующей модификации?

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

function myFunction() {
  const sheetName1 = "Tab";
  const sheetName2 = "Data";

  // Retrieve sheets.
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const [sheet1, sheet2] = [sheetName1, sheetName2].map(s => ss.getSheetByName(s));

  // Retrieve values from both sheets.
  const lastRow1 = sheet1.getLastRow();
  const values1 = sheet1.getRange("G1:H" + lastRow1).getValues();
  const values2 = sheet2.getRange("G1:I" + sheet2.getLastRow()).getValues();

  // Create an object for searching.
  const obj2 = new Map(values2.map(([g, h, i]) => [`${g}${h}`, i]));

  // Create the result array.
  const res = values1.map(([g, h]) => [obj2.get(`${g}${h}`) || null]);

  // Put the result array to column "O" of "Tab" sheet as a sample.
  sheet1.getRange(`O1:O${lastRow1}`).setValues(res);
}

При запуске этого сценария значения результатов помещаются в столбец «O». Потому что в вашей электронной таблице есть значения в столбце «N». Если вы хотите поместить значения в столбец «N», измените sheet1.getRange(`O1:O${lastRow1}`).setValues(res); на sheet1.getRange(`N1:N${lastRow1}`).setValues(res);.

Использованная литература:

Спасибо. Как мы можем объявить not match вместо null в разделе создания массива результатов? Если я добавлю "not match", res тоже вернется к пустым строкам. Мне нужен ответ, только если совпадают оба диапазона, в противном случае верните not match, где gh col имеет значение.

Jebra 15.07.2024 17:17

@Jebra По поводу твоего нового вопроса In the create the result array section, how can we declear not match instead of null? If i add "not match", the res return to empty rows too. I need response only if match both range otherwise return not match where g h col has value., я бы хотела тебя поддержать. Но я должен извиниться за мое плохое знание английского. К сожалению, я не могу понять ваш новый вопрос. Могу ли я спросить вас о деталях вашего нового вопроса?

Tanaike 16.07.2024 02:32

Я имею в виду, что мне нужна проверка null, если значение равно нулю, оно будет отображаться в виде текста ошибки в ячейках.

Jebra 16.07.2024 20:57

@Jebra Спасибо за ответ. Я должен еще раз извиниться за мое очень-очень плохое знание английского. Я до сих пор не могу понять i need a validation of null if the value is null, it will show as error text in the cells.. Можете ли вы предоставить примеры ожидаемых входных и выходных значений? Под этим я хотел бы попытаться понять ваш новый вопрос.

Tanaike 17.07.2024 01:08

Другие вопросы по теме