如何根据列复制行? Google 张(请仅提供公式)
How to duplicate rows based on columns? Google sheets (only formulas please)
我有这样的东西:
项目
颜色
编号
测试 1
白色
ID001
ST01
ST02
ST03
测试 2
红色
ID002
ST02
ST03
我想要这样的东西:
项目
颜色
编号
测试 1
白色
ID001
ST01
测试 1
白色
ID001
ST02
测试 1
白色
ID001
ST03
测试 2
红色
ID002
ST02
测试 2
红色
ID002
ST03
所以基本上基于最后 3 列的值,我想复制行并将这些列的值分配给创建的每一行。
我正在尝试使用转置和拆分公式以及其他一些东西,但我无法得到我想要的结果..如果不可能,也请告诉我。
function myfunk() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet0');
let vs = sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).getValues();
sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).clearContent();
let vA = [];
vs.forEach((r, i) => {
if(r.length > 4) {
let t = r.slice(0,4);
let u = r.slice(3);
u.forEach((v,j) => {
let x = r.slice(0,4);
x[3] = v;
vA.push(x);
});
} else {
vA.push(r.slice());
}
});
sh.getRange(2, 1, vA.length, vA[0].length).setValues(vA);
}
Sheet 0 前:
COL1
COL2
COL3
COL4
COL5
COL6
6
6
14
a
b
c
19
16
16
a
b
c
2
16
1
a
b
c
Sheet 0 后:
COL1
COL2
COL3
COL4
COL5
COL6
6
6
14
a
6
6
14
b
6
6
14
c
19
16
16
a
19
16
16
b
19
16
16
c
2
16
1
a
2
16
1
b
2
16
1
c
使用:
=INDEX(SPLIT(QUERY(FLATTEN(IF(D1:F="",,A1:A&"×"&B1:B&"×"&C1:C&"×"&D1:F)),
"where Col1 is not null"), "×"))
我有这样的东西:
项目 | 颜色 | 编号 | |||
---|---|---|---|---|---|
测试 1 | 白色 | ID001 | ST01 | ST02 | ST03 |
测试 2 | 红色 | ID002 | ST02 | ST03 |
我想要这样的东西:
项目 | 颜色 | 编号 | |
---|---|---|---|
测试 1 | 白色 | ID001 | ST01 |
测试 1 | 白色 | ID001 | ST02 |
测试 1 | 白色 | ID001 | ST03 |
测试 2 | 红色 | ID002 | ST02 |
测试 2 | 红色 | ID002 | ST03 |
所以基本上基于最后 3 列的值,我想复制行并将这些列的值分配给创建的每一行。
我正在尝试使用转置和拆分公式以及其他一些东西,但我无法得到我想要的结果..如果不可能,也请告诉我。
function myfunk() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet0');
let vs = sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).getValues();
sh.getRange(2, 1, sh.getLastRow() - 1, sh.getLastColumn()).clearContent();
let vA = [];
vs.forEach((r, i) => {
if(r.length > 4) {
let t = r.slice(0,4);
let u = r.slice(3);
u.forEach((v,j) => {
let x = r.slice(0,4);
x[3] = v;
vA.push(x);
});
} else {
vA.push(r.slice());
}
});
sh.getRange(2, 1, vA.length, vA[0].length).setValues(vA);
}
Sheet 0 前:
COL1 | COL2 | COL3 | COL4 | COL5 | COL6 |
---|---|---|---|---|---|
6 | 6 | 14 | a | b | c |
19 | 16 | 16 | a | b | c |
2 | 16 | 1 | a | b | c |
Sheet 0 后:
COL1 | COL2 | COL3 | COL4 | COL5 | COL6 |
---|---|---|---|---|---|
6 | 6 | 14 | a | ||
6 | 6 | 14 | b | ||
6 | 6 | 14 | c | ||
19 | 16 | 16 | a | ||
19 | 16 | 16 | b | ||
19 | 16 | 16 | c | ||
2 | 16 | 1 | a | ||
2 | 16 | 1 | b | ||
2 | 16 | 1 | c |
使用:
=INDEX(SPLIT(QUERY(FLATTEN(IF(D1:F="",,A1:A&"×"&B1:B&"×"&C1:C&"×"&D1:F)),
"where Col1 is not null"), "×"))