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);
}
在此电子表格中,我有一行包含所有员工数据,值来自另一个 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);
}