Pop() 和 append() 到下一行

Pop() and append() to next row

在此电子表格中,我有一行包含所有员工数据,值来自另一个 table;为了创建请求的布局,我需要每个员工 3 行,每行以 |1|、|1.1|、|1.1| 开头,我在这里找到了一些代码,允许我将两行附加到每一行数据,但不知道如何将 |1.1|,GTF,'100' 移动到下一行,然后将 |1.1|,PPA,'15' 移动到下一行。

这是我的:

|1|,'900','04000','0000','0','0000','0','11','0','S','A',|1.1|,GTF,'100',|1.1|,PPA,'15' |1|,'986','01000','0000','0','0000','0','14','0','S','A',|1.1 |,GTF,'110',|1.1|,PPA,'30'
|1|,'1046','01000','0000','0','0000','0','14','0','S','A',|1.1 |,GTF,'120​​',|1.1|,PPA,'45'

我要找的是这样的:

|1|,'900','04000','0000','0','0000','0','11','0','S','A'
|1.1|,GTF,'100'
|1.1|,PPA,'15'
|1|,'986','01000','0000','0','0000','0','14','0','S','A',
|1.1|,GTF,'110'
|1.1|,PPA,'30'

    function insertRows() {
  var startRow = 1;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Prenom");

  var sourceRange = sheet.getRange(startRow, 1, sheet.getLastRow());
  var sheetData = sourceRange.getValues();

  var numRows = sourceRange.getNumRows() - startRow;
//  Logger.log(numRows);

  for (var i=numRows; i > -1; i--) {
    if (sheetData[i].join("")) {
      sheet.insertRowsAfter(i + startRow, 2);
    }
  }
}

Which leaves me with two empty rows. ty



                                        
function separate() {
  const s = `|1|,'900','04000','0000','0','0000','0','11','0','S','A',|1.1|,GTF,'100',|1.1|,PPA,'15' 
  |1|,'986','01000','0000','0','0000','0','14','0','S','A',|1.1|,GTF,'110',|1.1|,PPA,'30'
|1|,'1046','01000','0000','0','0000','0','14','0','S','A',|1.1|,GTF,'120',|1.1|,PPA,'45'`;
  let r = s.match(/([^']+[^|]+)/g);
  Logger.log(r.join('\n'));
}

Execution log
12:02:55 PM Notice  Execution started
12:02:55 PM Info    ||1|,'900','04000','0000','0','0000','0','11','0','S','A',
|1.1|,GTF,'100',
|1.1|,PPA,'15' 
  
|1|,'986','01000','0000','0','0000','0','14','0','S','A',
|1.1|,GTF,'110',
|1.1|,PPA,'30'

|1|,'1046','01000','0000','0','0000','0','14','0','S','A',
|1.1|,GTF,'120',
|1.1|,PPA,'45'
12:02:56 PM Notice  Execution completed

function separate() {
  const s = `|1|,'900','04000','0000','0','0000','0','11','0','S','A',|1.1|,GTF,'100',|1.1|,PPA,'15' 
  |1|,'986','01000','0000','0','0000','0','14','0','S','A',|1.1|,GTF,'110',|1.1|,PPA,'30'
|1|,'1046','01000','0000','0','0000','0','14','0','S','A',|1.1|,GTF,'120',|1.1|,PPA,'45'`;
  let r = s.match(/([^']+[^|]+)/g).map(e => [e]);
  let sh = SpreadsheetApp.getActiveSheet();
  sh.getRange(1,1,r.length).setValues(r);
}

每次找到 |1.1| 时,您都必须拆分单元格值。有几种方法可以做到这一点。例如,您可以在下面的示例中组合 indexOf and splice

完成后,使用setValues覆盖原始数据。

代码示例:

function insertRows() {
  var startRow = 1;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Prenom");
  var sourceRange = sheet.getRange(startRow, 1, sheet.getLastRow());
  var sheetData = sourceRange.getValues().flat();
  sheetData = sheetData.map(cell => {
    const array = cell.split(",");
    const outputArray = [];
    let index = 0;
    while (index >= 0) {
      index = array.indexOf("|1.1|", 1);
      if (index !== -1) section = array.splice(0, index).join(",");
      else section = array.join(",");
      outputArray.push(section);
    }
    return outputArray;
  }).flat().map(row => [row]);
  sheet.getRange(startRow, 1, sheetData.length, sheetData[0].length).setValues(sheetData);
}