Google表格 - 如何创建添加和减去按钮以跟踪广告资源

时间:2015-05-15 19:50:33

标签: button google-sheets spreadsheet

我一直在寻找类似的解决方案,但到目前为止我还没有做到。这就是我想要完成的事情:

我需要提出一个基本解决方案,以便在每天结束时同步库存数量。我们对全天销售的库存进行实际计数,但需要记录这些更改并在用户之间共享。我想使用两个按钮(单击一个按钮减去一天结束时销售的商品数量,然后单击一个按钮添加新收到的库存)。

这就是我的工作表的设置方式:

Col A:产品标签
Col B:产品sku
Col C:今天出售的数量
Col D:总库存数量
Col E:添加新库存

D列将预先填充初始库存盘点。在每天结束时,我想下载我的产品清单并填写当天在C列中销售的每件商品的数量。一旦C列完全填充,我想点击“减去”按钮并拥有从D列中减去C列。

另一方面,一旦我们收到一个项目的新库存,我想将这些计数输入到列E中。一旦完全填充此列,我想单击“添加”按钮并添加列E D栏。理想情况下,一旦完成加法或减法功能,C或E栏将被清除,并为下一天的入境做好准备。

我已经设计了我的按钮,我只是需要帮助来完成这个脚本。对此的任何见解都将是一个巨大的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用Google Apps脚本。

如果您不熟悉,请在特定的电子表格中,转到工具→脚本编辑器,然后选择空白项目选项。

然后你可以编写这样的函数来实现你想要的效果!

function subtractSold() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var c1 = sheet.getRange("C2");
  var c2 = sheet.getRange("D2");

  while (!c1.isBlank() && !c2.isBlank()){
    c2.setValue(c2.getValue() - c1.getValue());
    c1.clear();
    c1 = c1.offset(1, 0);
    c2 = c2.offset(1, 0);
  }
}

基本上该功能的作用是:

  1. 获取对活动电子表格的引用
  2. 获取第一行数据的单元格C2和D2的引用。
  3. 使用while循环重复遍历行。当任一单元格为空时终止。
  4. 在循环中,我们得到适当的值,减去并将值设置回单元格。然后我们清除C列中的单元格。然后我们将两个单元格引用向下移动一行(offset方法返回对原始单元格的引用,但偏移 row,column )。
  5. 然后在按钮的“分配脚本”选项中输入功能名称(本例中为subtractSold),将脚本分配给按钮图像。

    我在这里制作了一个示例表(转到文件→制作副本以尝试脚本并查看代码):https://docs.google.com/spreadsheets/d/1qIJdTvG0d7ttWAUEov23HY5aLhq5wgv9Tdzk531yhfU/edit?usp=sharing

    加快一点

    如果您尝试上面的工作表,您可以看到它一次处理一行,当您有很多行时,这可能会非常慢。理解处理整个列可能会更快,但理解起来可能要复杂一些:

    function subtractSoldBulk() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var maxRows = sheet.getMaxRows();
    
      var soldRange = sheet.getRange(2, 3, maxRows); // row, column, number of rows
      var totalRange = sheet.getRange(2, 4, maxRows);
    
      var soldValues = soldRange.getValues();
      var totalValues = totalRange.getValues();
      for (var row in soldValues) {
        var soldCellData = soldValues[row][0];
        var totalCellData = totalValues[row][0];
    
        if (soldCellData != "" && totalCellData != "") {
          totalValues[row][0] = totalCellData - soldCellData;
          soldValues[row][0] = "";
        }
      }
    
      soldRange.setValues(soldValues);
      totalRange.setValues(totalValues);
    }
    

    这里的不同之处在于,我们获得了一个单元格范围,而不是获得一个单元格。然后getValues()方法为我们提供该范围内数据的2D数组。我们对两个数组进行计算,更新数组中的数据,然后根据数组数据设置范围的值。

    您可以在Google文档中找到上述方法的文档:https://developers.google.com/apps-script/reference/spreadsheet/sheet