微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用应用程序脚本计算单元格数量并根据它更改其他列中的上下文? 示例脚本:注意:参考:

如何解决如何使用应用程序脚本计算单元格数量并根据它更改其他列中的上下文? 示例脚本:注意:参考:

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

Here are the example and result I want.

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

当我尝试使用此脚本时,出现一个错误显示“值未定义”。

Here is the code

解决方法

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

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);
}
  • 在此脚本中,使用了您的示例电子表格。所以请注意这一点。
  • 当你想把结果值放到其他范围时,请修改上面的脚本。
结果:

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

enter image description here

注意:

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

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

参考:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?