Есть ли способ перечислить значения массива в одной ячейке, добавив одно к другому

Я делаю функцию приложения Google Sheets, которая проверяет, может ли идентификатор на одном листе быть связан с каким-либо из пациентов (каждый пациент получает идентификатор), а затем добавляю его в свой файл (одна ячейка рядом с их именем).

Я нахожусь в точке, где я могу получить информацию в ячейку с помощью .copyValuesToRange, но проблема в том, что все значения копируются в ячейку одно за другим. Желаемый эффект заключается в том, что я получаю все значения, разделенные ",".

Вот мой код:

function newCaseIn() {
  let app = SpreadsheetApp;
  let dest = app.getActiveSpreadsheet().getSheetByName("Baza Danych");
  let form = app.getActiveSpreadsheet().getSheetByName("Zgloszenia");

  
  for (let i = 2; i < 200; i++) {
    if (form.getRange(i, 2).getValue()) {
      while (true) {
        form.getRange(i, 3).copyValuesToRange(0, 9, 9, 2, 2);
        
      }
    }
  }
}

А вот как выглядит база данных: База данныхПредставление формы

ПРИМЕЧАНИЕ. На втором листе есть форма, позволяющая людям отправлять новые файлы пациентов на указанный идентификатор.

Я не уверен, как вам поможет копирование всех значений массива в одну ячейку. Но вот способ. Sheet.getRange("A1").setValue(Array.join('\n')); Все они оказываются на другой линии

Cooper 09.04.2022 23:50

Да ну, я хотел сначала получить это, а затем узнать, как вставить его в зависимости от идентификатора, я думаю, что я мог бы работать со смещением

frozone 09.04.2022 23:53

Я не понимаю, что вы сказали, но если это поможет, то это хорошо.

Cooper 09.04.2022 23:56
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
3
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Это может быть что-то вроде этого:

function main() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let dest = ss.getSheetByName("Baza Danych");
  let form = ss.getSheetByName("Zgloszenia");

  // get all data from the form
  var source_data = form.getDataRange().getValues();
  source_data.shift(); // remove the header

  // make the data object
  // in: 2d array [[date,id1,doc], [date,id2,doc], ...]
  // out: object {id1: [doc, doc, doc], id2: [doc, doc], ...}
  var source_obj = {};
  while(source_data.length) {
    let [date, id, doc] = source_data.shift();
    try { source_obj[id].push(doc) } catch(e) { source_obj[id] = [doc] }
  }

  // get all data from the dest sheet
  var dest_data = dest.getDataRange().getValues();

  // make a new table from the dest data and the object
  var table = [];
  while (dest_data.length) {
    let row = dest_data.shift();
    let id = row[0];
    let docs = source_obj[id]; // get docs from the object
    if (docs) row[8] = docs.join(', ');
    table.push(row);
  } 

  // clear the dest sheet and put the new table
  dest.clearContents();
  dest.getRange(1,1,table.length,table[0].length).setValues(table);
}

Обновлять

Код выше очищает существующие документы в ячейках столбца 9 и заполняет его документами из листа формы (для соответствующих идентификаторов).

Если в целевом листе уже есть некоторые документы в столбце 9, и вы хотите добавить новые документы, вам нужно изменить последний цикл следующим образом:

  // make a new table from the dest data and the object
  var table = [];
  while (dest_data.length) {
    let row = dest_data.shift();
    let id = row[0];
    let docs = source_obj[id]; // get docs from the object
    if (docs) {
      let old_docs = row[8];
      row[8] = docs.join(', ');
      if (old_docs != '') row[8] = old_docs + ', ' + row[8];
    }
    table.push(row);
  }

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