根据 Google 表格中的动态列计数创建键值对

问题描述 投票:0回答:1

我有一个谷歌工作表,其中有一个带有数据“键”的列,然后是动态填充数据的水平列,我试图创建一个填充单元格的长“键值”数据对,这些是字符串,因此一些基于数字的黑客不起作用:/

数量 A B C D E F G H J
1 钥匙1 v1 v2 v3 v4
2 键2 va1 va2 va3
3 键3 vb1
4 键3 vc1 vc2 vc3 vc4 vc5 vc6 vc7 vc8 vc9

我的目标是把它变成2列纯粹的键值

数量 A B
1 钥匙1 v1
2 钥匙1 v2
3 钥匙1 v3
... ... ...
10 钥匙3 vc1
11 钥匙3 vc2

我尝试过各种“unpivot”解决方案,但它们往往需要静态列计数,而不是我将拥有的动态列计数

google-sheets google-apps-script
1个回答
0
投票

我相信您的目标如下。

  • 您想使用 Google Apps 脚本实现显示输入和输出情况。
  • 在您显示的输出表中,第 10 行似乎是
    Key3,vc1
    。但是,从您的示例输入表中,我猜测第 10 行可能是
    key3,vc2

在这种情况下,下面的示例脚本怎么样?

示例脚本:

请将以下脚本复制并粘贴到电子表格的脚本编辑器中,并设置工作表名称并保存脚本。

function myFunction() {
  const sheetName = "Sheet1"; // Please set your sheet name.

  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  const range = sheet.getDataRange();
  const values = range.getValues().flatMap(([h, ...v]) => v.filter(String).map(e => [h, e]));
  range.clearContent();
  sheet.getRange(1, 1, values.length, values[0].length).setValues(values);
}

测试:

运行此脚本,得到以下结果。

该脚本覆盖了现有的单元格。但是,例如,如果您想放入第 10 行的结果值,请按如下方式替换上述脚本中的最后 2 行。

sheet.getRange(10, 1, values.length, values[0].length).setValues(values);

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.