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

Я пытаюсь получить диапазоны со всех вкладок и поместить значения на конкретную вкладку под названием «Данные» в столбце P.

У меня есть значения диапазона A2:B между всеми вкладками, и я пытаюсь получить значения методом сопоставления.

Проблема в том, что каждая из вкладок имеет значение приращения срабатывания в массиве, поэтому оно не будет правильно помещено в данные и сработает только с последней вкладки.

Таблица

Меня судят:

function myFn() {
  const ss = SpreadsheetApp.openById("id");
  const forSheets = ss.getSheets();
  const skip = ['Data'];
  const ssData = ss.getSheetByName('Data');

  forSheets.forEach(sheet => {
    if (!skip.includes(sheet.getName())) {
      const ssd = ssData.getRange("A2:B" + ssData.getLastRow()).getValues();
      const tabs = sheet.getRange("A2:E").getValues();
      const obj1 = new Map(tabs.map(([a, b, c, d, e]) => [`${a}${b}`, e]));
      const res = ssd.map(([a, b]) => [obj1.get(`${a}${b}`) || null]);
      ssData.getRange("P2:P").setValues(res);
      console.info(res)
    }
  })
}

Существует несколько вкладок, одна из которых называется «данные», а остальные — и теперь, просто для целей тестирования, значения расположены в строках:

Другое вкладка1 [ [ 31 ], [ 62 ], [ 88], [ null ], [ null ], [ null ],]

Другое tab2 [ [ null ], [ null ], [ null ], [ 998 ], [ 262], [ 129 ],]

Кажется, мне нужно что-то вроде этого, чтобы решить проблему или объединить все массивы вкладок: Как?

Другое вкладка1 [ [ 31 ], [ 62 ], [ 88 ], [ null ], [ null ], [ null ],]

Другое tab2 [ [ 221 ], [ 998 ], [ 262 ], [ null ], [ null ], [ null ],]

На вкладке «Данные» я получаю значение * только из значений последней вкладки.

Вы пытаетесь записать в «Данные» только ненулевые значения, чтобы пустые значения не перезаписывали существующие? Или вы пытаетесь сгруппировать их так, чтобы все значения отображались в таблице данных независимо от того, перекрываются ли они на других вкладках?

smallpepperz 16.07.2024 16:11

Не могли бы вы добавить ожидаемые результаты для первого и второго набора примеров?

smallpepperz 16.07.2024 16:12

@smallpepperz, Вопрос обновлен и добавлена ​​демонстрационная таблица, пожалуйста, проверьте сейчас.

sona 16.07.2024 18:46

@sona, я заметил, что некоторые столбцы на других листах между данными пусты. Будут ли в этих столбцах другие данные? Будет ли это означать, что вам нужны только столбцы A, B и E?

PatrickdC 16.07.2024 19:10
Поведение ключевого слова "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) для оценки ваших знаний,...
0
4
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Объедините данные в один массив

Вы можете объединить все данные на других листах, используя getSheets(), map() и filter().

Скрипт

Вы можете обратиться к sample script ниже:

function collectData2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var data = ss.getSheets().filter(sheet => sheet.getName() != "Data").map(x => x.getDataRange().getValues());
  data.map(x => x.shift());
  data1 = data.flat().map(x => x.filter((y, i) => (i == 0) + (i == 1) + (i == 4)));
  var data0 = ss.getSheetByName("Data").getRange(2, 1, ss.getSheetByName("Data").getLastRow() - 1, 2).getValues();
  var out = data0.map(x => data1.filter(y => (y[0] == x[0])*((y[1] == x[1]))).map(z => z[2])).map(a => a.length > 0 ? a : [null])
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data").getRange(2, 16, out.length, 1).setValues(out);
}

Я вручную задал столбец для извлечения. Вывод этого сценария должен выглядеть следующим образом:

при этом я пробовал случайные выборки, чтобы проверить, действительно ли скрипт искал значения на основе столбцов A и B.

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

Пожалуйста, не стесняйтесь спрашивать что-либо относительно ответа, опубликованного выше.

PatrickdC 16.07.2024 19:24

После совпадения A1: B на обеих вкладках мне нужно объединить только столбец E, чтобы я мог поместить его в столбец P на вкладке «Данные».

sona 16.07.2024 19:58

Я добавил обновление. Я включил столбцы A и B только в начало ответа, чтобы показать, что данные расположены в правильном порядке.

PatrickdC 16.07.2024 20:07

Да, я понимаю, что массив объединяется, но он несовместим с моим сценарием. Вы пытались установить значения?

sona 16.07.2024 20:15
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data")‌​.getRange(2,16,data.‌​length,1).setValues(‌​data); работает на моей стороне. Могу я узнать, как ты это сделал со своей стороны?
PatrickdC 16.07.2024 20:20

данные отвечают с ошибкой. Exception: The number of columns in the data does not match the number of columns in the range. The data has 0 but the range has 1.

sona 16.07.2024 20:29

Давайте продолжим обсуждение в чате.

sona 16.07.2024 20:30

иногда это работает, но в основном выдает такую ​​ошибку Exception: The number of columns in the data does not match the number of columns in the range. The data has 296 but the range has 1.

sona 17.07.2024 04:44

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