Google Sheet OnChange 触发器复制传入行但需要拆分成多行(基于列)

Google Sheet OnChange trigger to copy incoming row but needs to Split into multiple rows (based on column)

我有一个 Google Sheet,其中 'Form Responses' sheet 由外部集成 (JotForm) 填充。
我有一个响应传入行的 onChange 触发器,并将数据复制到一个 worksheet 或另一个(基于特定列值的报价或订单)。这工作正常,但我想将行拆分为多行 - 使用将出现在其中一个字段中的 'new line' 分隔符。这样做的目的是让第 3 方能够对订单项进行精细更新。

Image of incoming data

Image or resulting data that I wish to have

可以是这样的:

function main() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data  = sheet.getDataRange().getValues();
  var table = split_rows(data);

  sheet
    .clearContents()
    .getRange(1,1,table.length,table[0].length)
    .setValues(table);
}


function split_rows(data) {
  var rows = [];

  while (data.length) {
    var row = data.shift();
    var items = row[4].split('\n');

    while(items.length) {
      var item = items.shift();
      rows.push([row[0], ...row.slice(2,4), item, ...row.slice(5)]);
    }
  }
  
  return rows;
}

输入:

输出:

更新

这是主函数的示例,它从活动 sheet 中获取最后一行,将其拆分(与上面的函数 split_rows() 相同)并在末​​尾附加结果行sheet 'Sheet2':

function main_append_rows() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var last_row = data.pop();
  var new_rows = split_rows([last_row]);

  var dest_sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
  while(new_rows.length) dest_sheet.appendRow(new_rows.shift());
}