google-apps-script - 如何拆分和转置两列结果

标签 google-apps-script google-sheets

不知道如何解决这个问题。我如何完成以下来自表格的信息:

ColA (UniqID)       ColB
41447.9162847222    Name1, Name2, Name3, Name4
41447.9158912037    Name2, Name6, Name9

我想最终得到:

ColA               B
41447.9162847222   Name1
41447.9162847222   Name2
41447.9162847222   Name3
41447.9162847222   Name4
41447.9158912037   Name2
41447.9158912037   Name6
41447.9158912037   Name9

我无法使用 VLOOKUP 或 MATCH,因为名称可能在其他记录中重复,但 ColA 代码始终是唯一的。

T

最佳答案

使用 native 电子表格函数的答案:

=ArrayFormula(TRANSPOSE(REGEXREPLACE(SPLIT(CONCATENATE(SUBSTITUTE(", "&B:B;", ";CHAR(10)&A:A&CHAR(9)));CHAR(10));"(.*?)\t(.*)";{"$1";"$2"})))

缺点是使用此方法将所有列强制转换为文本字符串。有一些解决方法,但公式会变得更加荒谬。


使用 Google Apps 脚本自定义函数的答案,该函数还会根据评论中的请求修剪逗号分隔列表中的前导和尾随空格:

function advanceSplit(range1, range2)
{
  var output = [], temp;
  for (var i = 0, length = range1.length; i < length; i++)
  {
    if (range1[i][0])
    {
      var temp = range2[i][0].split(",");
      for (var j = 0, length2 = temp.length; j < length2; j++)
      {
        output.push([range1[i][0], temp[j].trim()]);
      }
    }
  }
  return output;
}

然后在电子表格单元格中调用:

=advancedSplit(A:A;B:B)

我的轶事观察是,对于非常大的数据集,后一种方法(自定义函数)比前一种方法具有更好的性能。

关于google-apps-script - 如何拆分和转置两列结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17530499/

相关文章:

javascript - Google Script 中的 onEdit(e) - 尝试将最后编辑日期放入单元格并在某些工作表(选项卡)上排除此功能

google-apps-script - GAS : Alternative to using ScriptProperties. getProperty,需要通过 ID 检索事件

javascript - 我正在尝试将数据从单元格范围发送到不和谐的聊天 channel

javascript - 如何在 Google Apps 脚本上请求 Reddit 的访问 token

google-apps-script - Google Apps 脚本删除警告横幅

python - 两次调用 GetListFeed 失败 (gdata.spreadsheet.service.SpreadsheetsService())

javascript - 如何将排序和匹配谷歌表格公式转换为应用程序脚本/javascript?

google-apps-script - 如何使用 Apps 脚本获取 Google 表单目标的电子表格标签名称

google-apps-script - 获取条目 ID,用于在 Google 表单 URL 中预填充字段(项目)

android - 将 Google 电子表格数据下载到 App Inventor 以将其显示为表格