如何从重复多次的谷歌表单中提取JSON字符串的值?

d7v8vwbk  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(154)

我有下表:

我希望输出是

我似乎找不到这方面的任何资源。

ckx4rj1h

ckx4rj1h1#

在您的情况下,如何使用Google Apps脚本如下?

示例脚本:

请将以下脚本复制粘贴到Spreadsheet的脚本编辑器中并保存。当使用您的显示示例图像时,请将自定义函数=SAMPLE(J2:J)放入单元格“K2”中。这样,脚本就会运行。

function SAMPLE(values) {
  const headers = ["item_description", "quantity"]; // Please check each value again.
  const temp = values.map(([j]) => j ? JSON.parse(j.trim()).flatMap(e => headers.flatMap(h => e[h] || null)) : []);
  const max = Math.max(...temp.map(e => e.length));
  return temp.map(e => [...e, ...Array(max - e.length).fill(null)]);
}

测试:

当此脚本使用示例值时,将获得以下示例情况。

注:

  • 如果您想将值固定到单元格,下面的示例脚本如何?运行此脚本时,将从列“J”中检索值。转换后的值将从列“K”中输入。获得与上述脚本相同的结果。
function myFunction() {
  const headers = ["item_description", "quantity"];// Please check each value again.
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // Please set the sheet name.
  const values = sheet.getRange("J2:J" + sheet.getLastRow()).getValues();
  const temp = values.map(([j]) => j ? JSON.parse(j.trim()).flatMap(e => headers.flatMap(h => e[h] || null)) : []);
  const max = Math.max(...temp.map(e => e.length));
  const res = temp.map(e => [...e, ...Array(max - e.length).fill(null)]);
  sheet.getRange(2, 11, res.length, res[0].length).setValues(res);
}

参考:

相关问题