使用 Google 表根据 ID 拆分字符串中的逗号分隔值
Split Comma Separated Values in a String against ID with Google Sheets
我有一些数据存在于 Google Sheet 中并连接到 Google Data Studio。其中一些数据在字符串中以逗号分隔。以上是部分数据的示例 link。
我会尽我所能解释,但是这个关于如何在 Excel 中使用 Power Query 解决问题的视频正是我想要做的,仅在 Google Sheet秒。 Instructional Video on YouTube
在上面的示例 sheet 中,我在“数据”选项卡的 A 列中有一个受访者 ID,在“数据”选项卡的 B 列中有逗号分隔的字符串。
在 B 列的“解决方案”选项卡中,您会看到我使用以下代码将 B 列的内容从“数据”选项卡拆分和转置到“解决方案”选项卡。 =transpose(split(join(" ",arrayformula(Data!B2:B&",")),","))
这对于将值拆分到该列中各自的行非常有效
但我需要的是将 ID 映射到“解决方案”选项卡中 A 列中的相应值。对于我的生活,我无法弄清楚。
如有任何帮助,我们将不胜感激。谢谢!
更新:
我还找到了一个自定义函数的脚本,我认为它可以工作,但我不确定如何让它工作。我收到一条错误消息“TypeError: cannot read 属性 length...”
function myFunction(range) {
delimiter = ", ";
targetColumn = 1;
targetColumn2 = 2;
var output2 = [];
for(var i=0, iLen=range.length; i<iLen; i++) {
var s = range[i][targetColumn].split(delimiter);
var s2 = range[i][targetColumn2].split(delimiter);
for(var j=0, jLen=s.length; j<jLen; j++) {
var output1 = [];
for(var k=0, kLen=range[0].length; k<kLen; k++) {
if(k == targetColumn) {
output1.push(s[j]);
}
else if (k == targetColumn2) {
output1.push(s2[j]);
} else {
output1.push(range[i][k]);
}
}
output2.push(output1);
}
}
return output2;
}
方法
我会在这里使用自定义函数:
/**
* @customfunction
*/
function covid(range) {
let delimiter = ", ";
let newRows = [];
for (let i in range) {
let row = range[i];
let id = row[0];
let strings = row[1].split(delimiter); // split the responses
for (let j in strings) {
newRows.push([id, strings[j]]); // links the responder id to its splitted response
}
}
return newRows; // prints the rows
}
在您的情况下,输入参数是 A1 表示法范围:
=covid(Data!A2:B383)
尝试:
=ARRAYFORMULA(TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
IF(IFERROR(SPLIT(B2:B, ","))="",,"♠"&A2:A&"♦"&SPLIT(B2:B, ",")))
,,99^99)),,99^99), "♠")), "♦")))
spreadsheet demo
最近发现了一个隐藏在 Google sheet 后端的名为 FLATTEN() 的新函数,这些问题有一个简单的解决方案。
我也复制了一份,因为您共享的 sheet 只能查看。 Link to Copy.
在新标签页上这个公式:
=ARRAYFORMULA(QUERY(SPLIT(FLATTEN(Data!A2:A&"|"&TRIM(SPLIT(Data!B2:B,","))),"|",0,0),"where Col2 is not null"))
稍微复杂一些,但在 Alt.Solution 选项卡上解析为 3 列而不是 2 列。
=ARRAYFORMULA(QUERY(SPLIT(SUBSTITUTE(FLATTEN(Data!A2:A&" ("&TRIM(SPLIT(Data!B2:B,","))),")","")," (",0,0),"where Col3 is not null"))
我有一些数据存在于 Google Sheet 中并连接到 Google Data Studio。其中一些数据在字符串中以逗号分隔。以上是部分数据的示例 link。
我会尽我所能解释,但是这个关于如何在 Excel 中使用 Power Query 解决问题的视频正是我想要做的,仅在 Google Sheet秒。 Instructional Video on YouTube
在上面的示例 sheet 中,我在“数据”选项卡的 A 列中有一个受访者 ID,在“数据”选项卡的 B 列中有逗号分隔的字符串。
在 B 列的“解决方案”选项卡中,您会看到我使用以下代码将 B 列的内容从“数据”选项卡拆分和转置到“解决方案”选项卡。 =transpose(split(join(" ",arrayformula(Data!B2:B&",")),","))
这对于将值拆分到该列中各自的行非常有效
但我需要的是将 ID 映射到“解决方案”选项卡中 A 列中的相应值。对于我的生活,我无法弄清楚。
如有任何帮助,我们将不胜感激。谢谢!
更新:
我还找到了一个自定义函数的脚本,我认为它可以工作,但我不确定如何让它工作。我收到一条错误消息“TypeError: cannot read 属性 length...”
function myFunction(range) {
delimiter = ", ";
targetColumn = 1;
targetColumn2 = 2;
var output2 = [];
for(var i=0, iLen=range.length; i<iLen; i++) {
var s = range[i][targetColumn].split(delimiter);
var s2 = range[i][targetColumn2].split(delimiter);
for(var j=0, jLen=s.length; j<jLen; j++) {
var output1 = [];
for(var k=0, kLen=range[0].length; k<kLen; k++) {
if(k == targetColumn) {
output1.push(s[j]);
}
else if (k == targetColumn2) {
output1.push(s2[j]);
} else {
output1.push(range[i][k]);
}
}
output2.push(output1);
}
}
return output2;
}
方法
我会在这里使用自定义函数:
/**
* @customfunction
*/
function covid(range) {
let delimiter = ", ";
let newRows = [];
for (let i in range) {
let row = range[i];
let id = row[0];
let strings = row[1].split(delimiter); // split the responses
for (let j in strings) {
newRows.push([id, strings[j]]); // links the responder id to its splitted response
}
}
return newRows; // prints the rows
}
在您的情况下,输入参数是 A1 表示法范围:
=covid(Data!A2:B383)
尝试:
=ARRAYFORMULA(TRIM(SPLIT(TRANSPOSE(SPLIT(QUERY(TRANSPOSE(QUERY(TRANSPOSE(
IF(IFERROR(SPLIT(B2:B, ","))="",,"♠"&A2:A&"♦"&SPLIT(B2:B, ",")))
,,99^99)),,99^99), "♠")), "♦")))
spreadsheet demo
最近发现了一个隐藏在 Google sheet 后端的名为 FLATTEN() 的新函数,这些问题有一个简单的解决方案。 我也复制了一份,因为您共享的 sheet 只能查看。 Link to Copy.
在新标签页上这个公式:
=ARRAYFORMULA(QUERY(SPLIT(FLATTEN(Data!A2:A&"|"&TRIM(SPLIT(Data!B2:B,","))),"|",0,0),"where Col2 is not null"))
稍微复杂一些,但在 Alt.Solution 选项卡上解析为 3 列而不是 2 列。
=ARRAYFORMULA(QUERY(SPLIT(SUBSTITUTE(FLATTEN(Data!A2:A&" ("&TRIM(SPLIT(Data!B2:B,","))),")","")," (",0,0),"where Col3 is not null"))