我一直在寻找类似的解决方案,但到目前为止我还没有做到。这就是我想要完成的事情:
我需要提出一个基本解决方案,以便在每天结束时同步库存数量。我们对全天销售的库存进行实际计数,但需要记录这些更改并在用户之间共享。我想使用两个按钮(单击一个按钮减去一天结束时销售的商品数量,然后单击一个按钮添加新收到的库存)。
这就是我的工作表的设置方式:
Col A:产品标签
Col B:产品sku
Col C:今天出售的数量
Col D:总库存数量
Col E:添加新库存
D列将预先填充初始库存盘点。在每天结束时,我想下载我的产品清单并填写当天在C列中销售的每件商品的数量。一旦C列完全填充,我想点击“减去”按钮并拥有从D列中减去C列。
另一方面,一旦我们收到一个项目的新库存,我想将这些计数输入到列E中。一旦完全填充此列,我想单击“添加”按钮并添加列E D栏。理想情况下,一旦完成加法或减法功能,C或E栏将被清除,并为下一天的入境做好准备。
我已经设计了我的按钮,我只是需要帮助来完成这个脚本。对此的任何见解都将是一个巨大的帮助!
答案 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);
}
}
基本上该功能的作用是:
然后在按钮的“分配脚本”选项中输入功能名称(本例中为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