【问题标题】:Using cell input into function and ovewriting result into result in same cell in Google Sheet使用单元格输入函数并将结果覆盖到 Google 表格中相同单元格的结果中
【发布时间】:2022-12-03 06:14:41
【问题描述】:

在 Google 表格中,我想输入一个单元格,进行计算,然后以不同的格式在同一个单元格中显示结果。这可能总是一个百分比值,我将使用条件格式为单元格着色以提供统计信息的“仪表板”视图。

示例是一个月的使用情况统计信息。

Assets Records
limit 50 1000
November 29 295
Assets Records
limit 50 1000
November 58% 30%

我找到了一篇 Quora 帖子,详细介绍了如何创建自己的脚本,所以我相信我已经掌握了获取和修改单元格内容的基线:

function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var cell = ss.getActiveSelection();
var cell_input = cell.getValue();

var cell_address = cell.getA1Notation()
var cell2 = ss.getRange(cell_address);

cell2.setFormula('=2*'+cell_input)
}

在这个例子中,我不确定如何引用它应该划分的单元格。

【问题讨论】:

  • 你的想法的问题是,如果你将数字格式设置为 % 那么每次你输入一个数字时它都会假定它是一个百分比。所以第一次输入 29 结果将是 58% 但如果下一次输入 28 结果将是 0.56%

标签: google-apps-script google-sheets google-sheets-formula


【解决方案1】:

下面是一个一般示例,可以让您了解如何在表格中操作单元格、格式和值:

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var cell = ss.getActiveSelection();
  var cell_input = cell.getValue();
  var divisor = cell.offset(-1, 0)

  if (e.range.getA1Notation()=="B3" || "C3"){
    cell.setNumberFormat("@").setValue(Math.ceil((cell_input / divisor.getValue()) * 100) + "%")
  }
}

如果您创建一个看起来像这样的工作表,您将获得您在 B3 和 C3 中寻找的行为:

这个怎么运作:

  • e参数添加到onEdit(e)触发器,以便您可以使用e.range读取调用函数的范围。
  • 要获取要划分的单元格,您需要知道它的确切范围或它与调用它的单元格的相对位置。由于在您的示例中,百分比单元格低于除数,您可以将它 offset() -1,这将返回它上方的单元格。如果相对位置发生变化,您需要考虑到这一点来修改偏移量,但如果您的表具有一致的结构,它通常应该可以工作。
  • 您需要使用if 来仅在特定范围内触发触发器,否则整个工作表都会受到影响。您可以通过将呼叫者 e.range 与您想要的范围进行比较来完成此操作。在这个例子中,为了简单起见,我只有两个单元格,所以我只是将单独的 B3 和 C3 单元格与 e.range.getA1Notation() 进行了比较,但是如果你想要更大的范围,你可能需要使用更高级的技术,比如this question
  • 为了解决 TheWizEd 的 comment 中描述的格式问题,我使用 setNumberFormat("@") 强制单元格为文本值。这样,如果您第二次输入一个值,它将读取为数字而不是百分比。我测试了使用工作表其他地方的值,它在需要时仍然以百分比形式工作,但要注意意外行为。

资料来源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多