繁体   English   中英

如何使用应用程序脚本来计算单元格数量并根据它更改其他列中的上下文?

[英]How to use apps script to count cells number and change the context in other column based on it?

目前,我的谷歌表格中有三列,第 1 列是公司名称,第 2 列是行业名称,第 3 列是营业额(但数据重复)。 我想计算相同的公司名称并根据该数字使用应用程序脚本划分营业额。

这是我想要的示例和结果。

这是我的原始电子表格。 https://docs.google.com/spreadsheets/d/1CPMXkOKzOjGEwcR7OdK7SCEO2Nri_DlN_GBoMLSwtTA/edit?usp=sharing

当我尝试使用此脚本时,出现显示“未定义值”的错误。 这是代码

请查看下面的代码片段,它应该会有所帮助。 我刚刚创建了一个 hash 公司在电子表格中出现的次数,然后使用这个 hash 我更新了初始数据。

 const data = [ {company: "A", turnover: 10000}, {company: "A", turnover: 10000}, {company: "A", turnover: 10000}, {company: "A", turnover: 10000}, {company: "B", turnover: 20000}, {company: "B", turnover: 20000}, ] const hash = {} for (let d of data) { if (d.company in hash) hash[d.company] += 1 else hash[d.company] = 1 } const updatedData = data.map(d => ({...d, turnover: d.turnover/hash[d.company] })) console.log(updatedData)

您也可以使用Map ,这就是我的建议!

 const data = [ {company: "A", turnover: 10000}, {company: "A", turnover: 10000}, {company: "A", turnover: 10000}, {company: "A", turnover: 10000}, {company: "B", turnover: 20000}, {company: "B", turnover: 20000}, ] const hash = new Map(); for (let d of data) { const currentVal = hash.get(d.company); if (currentVal) hash.set(d.company, currentVal + 1) else hash.set(d.company, 1) } const updatedData = data.map(d => ({...d, turnover: d.turnover / hash.get(d.company) })) console.log(updatedData)

我相信你的目标如下。

  • 您要实现以下情况。 (下图来自您的问题。)

  • 您想使用 Google Apps 脚本实现此目的。

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

示例脚本:

请将以下脚本复制并粘贴到电子表格的脚本编辑器中,然后运行myFunction的 function 。 这样,结果值被放入“D”列。

function myFunction() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
  const range = sheet.getRange("A2:C" + sheet.getLastRow());
  const values = range.getValues();
  const obj = values.reduce((o, [a]) => Object.assign(o, {[a]: (o[a] ? o[a] + 1 : 1)}), {});
  const newValues = values.map(([a,,c]) => [c / obj[a]]);
  range.offset(0, 3, newValues.length, 1).setValues(newValues);
}
  • 在此脚本中,使用您的示例电子表格。 所以请注意这一点。
  • 当您想将结果值放到其他范围时,请修改上面的脚本。
结果:

当上述脚本用于您的示例电子表格时,将获得以下结果。

在此处输入图像描述

笔记:

  • 在您的情况下,我认为您的目标也可以使用自定义 function 来实现。 如果要使用自定义 function,请使用以下脚本。 请将以下脚本复制并粘贴到电子表格的脚本编辑器中,并将=SAMPLE(A2:C)的公式放入单元格中。 这样,结果值将被放入单元格中。

     function SAMPLE(values) { const obj = values.reduce((o, [a]) => Object.assign(o, {[a]: (o[a]? o[a] + 1: 1)}), {}); return values.map(([a,,c]) => [a? c / obj[a]: ""]); }

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM