google或app-scrippt的大师们好!
我正面临另一个问题,这将需要我(以我目前的知识)做4个步骤来获得最终结果。我想知道我的问题是否可以用更温和的方式解决,而不需要4个助手列表。
我的原件有一列(列A),每行有两个或三个名字(列B,C,D):
最后,我希望只有2个列,比如


有什么建议可以去掉4个助手列表吗?我不喜欢我的方式首先转置,然后查询每一列.....我的解决方案不是动态的。;(请注意:一行中有一个单元格为空无关紧要。序列始终为3!
最好的方案甚至是根据另一个工作表(名称列: B;值列C)中的值对每个行/序列进行排序,以便索引对所有行/序列都是相同的。
发布于 2021-05-23 08:16:49
发布于 2021-05-23 09:09:58
function pivotb() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1');//data sheet
const vs = sh.getRange(2,1,sh.getLastRow() -1,4).getValues();
const osh = ss.getSheetByName('Sheet2');//output sheet
let obj = {pA:[]};
vs.forEach((r,i)=>{
if(!obj.hasOwnProperty(r[0])) {
obj[r[0]]=[];
obj.pA.push(r[0]);
let t=r.slice();
t.shift();
t.forEach(e=>{
if(e) {
obj[r[0]].push(e);
}
});
};
});
let oA=[['Number','Name']];//output array with headers
obj.pA.forEach(p=>{
obj[p].forEach(e=>{
oA.push([p,e])
});
});
osh.clearContents();
osh.getRange(1,1,oA.length,oA[0].length).setValues(oA);
}发布于 2021-05-23 09:43:30
假设所示的未处理数据位于名为Sheet1的工作表中,请将以下公式放入新工作表的单元格A1中:
=ArrayFormula({"number","name"; SPLIT(FLATTEN(FILTER(Sheet1!A2:A&"~"&Sheet1!B2:D,Sheet1!A2:A<>"")),"~",1,0)})
这将根据您所需的布局生成标题和所有结果。
您可以根据需要更改公式中的标题标签。
rest将A:A中每个单元格的值与B:D中每个相应行的值连接起来,并使用一个波浪号(~)。
FILTER只保留A:A不为空的那些条目。
FLATTEN在所有连接中生成一列。
SPLIT在波浪号处分为三列(请注意,SPLIT的最后一个参数是0,这意味着“不要从结果中删除空值”)。
https://stackoverflow.com/questions/67654954
复制相似问题