【问题标题】:Transactions in Google Sheet - Move value from, toGoogle 表格中的交易 - 将值从、移到
【发布时间】:2020-09-08 06:55:26
【问题描述】:

我正在尝试在 google sheet 上创建一个文档来管理我的财务状况,实际上,我希望能够跟踪我在我的帐户之间进行的交易。 我发了this sheet 来总结一下。

实际上,我可以告诉文档我正在进行交易from - to(在这种情况下,从内容 1 到内容 3)并添加一个新的value。 我不知道如何告诉 google sheet 将 25 从内容 1“移动”到内容 3 或任何其他内容。

感谢您的宝贵帮助。

【问题讨论】:

  • 如果我理解正确,您会想要触发从第 9 行开始的事务,并且此触发器会相应地更新值 B3:E3。是这样吗?在这种情况下,您可以在Apps脚本中创建onEdit触发器,并在每个事务旁边添加复选框,以便在选中复选框时,进行交易,并进行事务,B3:E3获取更新。那合适吗?如果是这种情况,我会考虑发布一个答案来解释这一点。
  • 就是这样!更准确地说,我想检测它来自哪个content,并从该内容中减去它并将其移动到目的地。所以在示例表中,我想将 25 从Content 1 移动到Content 3。但是如果我在from 列中将content 1 更改为content 2,它会正确调整。在B3:E3 行中。另外,这应该是一个扩展列表,所以如果我在B9 之后添加另一行,它可以重复操作。非常感谢。
  • 嗨,我发布了一个可能的解决方案的答案。如果您需要更多关于此的指示,请告诉我:)

标签: if-statement google-apps-script google-sheets


【解决方案1】:

您可以使用 Apps 脚本 onEdit 触发器来触发事务,并使用复选框来跟踪应该触发哪个事务,以便在选中相应复选框时进行事务。

  • 首先,通过选择适当的单元格并单击Insert > Checkbox,将复选框添加到交易行。

  • 然后,通过选择Tools > Script editor 打开绑定到电子表格的脚本,复制以下函数并保存项目。现在,每次选中复选框时,相应的交易都会在B2:E3 中进行,当取消选中时,交易将被撤消(fromto 交换位置,而钱则相反):

function onEdit(e) {
  var range = e.range;
  var col = range.getColumn();
  var row = range.getRow();
  var checkbox = e.value;
  var sheet = range.getSheet();
  if (col === 6 && row > 8) {
    var from = sheet.getRange(row, 3).getValue();
    var to = sheet.getRange(row, 4).getValue();
    var value = sheet.getRange(row, 5). getValue();
    var valuesToUpdate = sheet.getRange("B2:E2").getValues();
    var fromIndex = valuesToUpdate[0].findIndex(contents => contents === from);
    var toIndex = valuesToUpdate[0].findIndex(contents => contents === to);
    var fromRange = sheet.getRange(3, fromIndex + 2);
    var toRange = sheet.getRange(3, toIndex + 2);
    if (checkbox === "TRUE") { // MAKE TRANSACTION
      fromRange.setValue(fromRange.getValue() - value);
      toRange.setValue(toRange.getValue() + value);               
    } else if (checkbox === "FALSE") { // UNDO TRANSACTION
      fromRange.setValue(fromRange.getValue() + value);
      toRange.setValue(toRange.getValue() - value);    
    }
  }
}

每次编辑电子表格时都会触发此函数,但您只想在编辑的单元格是复选框并且选中此复选框时更新事务摘要。该函数正在检查这一点,使用通过event object (e) 传递给onEdit 函数的信息,其中包含有关已编辑单元格的信息(其值、范围等):

参考:

【讨论】:

  • 最后一个问题,当我选中该框时,它完成了交易,但是当我取消选中该框时是否可以撤消该操作?另外,我想将内容 1、2、3 和 for 更改为我的帐户名称,当我阅读代码时,您可以进行一系列竞争(对吗?)是否有可能具有像“往来帐户”和“Paypal”以及其他什么?非常感谢。
  • @pual 不客气。取消选中复选框时可以撤消该操作,但这需要重新编写一些代码。我会在时间允许的情况下处理它。关于您的第二个问题,是的,您的内容可以有其他名称,只要这些名称在单个交易和交易摘要中都匹配。
  • 非常感谢。你是对的,我在我的问题之后开始重命名这些,所以我可以自己检查。
  • @pual 我更新了答案中的代码,以便取消选中复选框取消交易,我希望这对你有用!
猜你喜欢
  • 1970-01-01
  • 2020-11-06
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
相关资源
最近更新 更多