如何解决如何使用应用程序脚本计算单元格数量并根据它更改其他列中的上下文? 示例脚本:注意:参考:
目前,我的 google 表格中有三列,第 1 列是公司名称,第 2 列是行业名称,第 3 列是营业额(但数据重复)。我想计算相同的公司名称并根据该数字使用应用程序脚本划分营业额。
Here are the example and result I want.
这是我的原始电子表格。 https://docs.google.com/spreadsheets/d/1CPMXkOKzOjGEwcR7OdK7SCEO2Nri_DlN_GBoMLSwtTA/edit?usp=sharing
解决方法
请看下面的代码片段,它应该会有所帮助。我刚刚创建了一个公司在电子表格中出现的次数的哈希值,然后使用这个哈希值更新了初始数据。
const data = [
{company: "A",turnover: 10000},{company: "A",{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",]
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
的功能。通过这种方式,结果值被放入“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);
}
- 在此脚本中,使用了您的示例电子表格。所以请注意这一点。
- 当你想把结果值放到其他范围时,请修改上面的脚本。
当上述脚本用于您的示例电子表格时,将获得以下结果。
注意:
-
就您而言,我认为您的目标也可以使用自定义函数来实现。如果要使用自定义函数,请使用以下脚本。请将以下脚本复制并粘贴到电子表格的脚本编辑器中,并将公式
=SAMPLE(A2:C)
放入单元格中。通过这种方式,结果值被放入单元格中。function SAMPLE(values) { const obj = values.reduce((o,{}); return values.map(([a,c]) => [a ? c / obj[a] : ""]); }
参考:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。