有没有一种方法可以通过将一个单元格添加到另一个单元格来列出一个单元格中的数组值

Is there a way to list the array values in one cell by adding one onto another

我正在制作一个 google sheets 应用程序功能,用于检查一个 sheet 中的 ID 是否可以与任何患者相关联(每个患者都会收到一个 ID) , 然后将其添加到他们的文件中(他们名字旁边的一个单元格)。

我现在可以使用 .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);
        
      }
    }
  }
}

下面是数据库的样子:Database FormSubmissions

注意:有一个表格可以归结为第二个 sheet 以允许人们将新的患者文件提交到指定的 ID

可能是这样的:

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 列单元格中的现有文档,并用 sheet 形式的文档填充它(对于相关 ID)。

如果目标 sheet 在第 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);
  }