我是一位非常环保的开发人员,试图在带有Google App脚本的Google表格中创建库存交易程序。我在仓库工作,正在努力使自己的工作和操作比当前系统更好(每个月的物理计数)。
有3个用于手动输入的单元格(SKU,类型/原因,数量),第4个单元格在所有3个单元格都填写完毕后自动生成时间戳。
一旦所有4个单元格都填满,我希望程序搜索正确的SKU(所有都是唯一的#'d),然后用+或-更新数量。
我也在考虑减少+ -QTY上的输入错误,因此可能正在寻找原因确定其是否为+/-。
例如类型= S =出售=- 例如。类型= N =新单位= +
库存被安排在一个Google表格上,代表SKU在货架上的实际位置。
我希望程序还将行向下移动1行,以保留库存交易记录。
enter code here
函数onEdit(e){
var activeSheet = e.source.getActiveSheet();
var range = e.range;
range = (obj1,obj2,obj3,obj4)
range[0] = obj1
range[0].getvalue = obj1.getvalue
range[1] = obj2
range[1].getvalue = obj2.getvalue
range[2] = obj3
range[2].getvalue = obj3.getvalue
range[3] = obj3
range[3].getvalue = obj4.getvalue
var var1=range[0].getvalue()
var var2=range[1].getvalue()
var var3=range[2].getvalue()
var var4=range[3].getvalue()
if var1<>"" and var2<>"" and var3<>"" and var4<>"")
var sheet = SpreadsheetApp.getActive()
sheet.getRange("C13:F13").moveto(sheet.getRange("D13:F13")
}
答案 0 :(得分:1)
我玩了一点。我知道您希望向下移动单元格,但是我发现更容易将SKU,类型,数量和时间戳向右移动,以在电子表格上保留交易记录。
因此希望这将使您对如何以自己的方式自行执行操作有一些了解。
以下是代码:
这是一个onEdit()函数(即简单触发器)
function onEdit(e) {
var sh=e.range.getSheet();
if(sh.getName()!='Sheet1')return;
var rg=sh.getRange(1,2,3,1);
var vA=rg.getValues().map(function(r){return r[0];});
var sku=vA[0];
var type=vA[1];
var quan=vA[2];
e.source.toast(sku + ',' + type + ',' + quan);
SpreadsheetApp.flush();
if(e.range.columnStart==2 && e.range.rowStart<5 && sku && type && quan) {
sh.getRange("B4").setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyyMMddHHmm"));
var sh2=e.source.getSheetByName('Sheet2');
var rg2=sh2.getDataRange();
var luA=rg2.getValues();
for(var i=1;i<luA.length;i++) {
if(luA[i][0]==sku) {
if(type=='Sold') {
//sh.getRange(3,2).setValue(Number(luA[i][2]-quan));
sh2.getRange(i+1,3).setValue(Number(luA[i][2]-quan));
e.source.toast('Sold');
}
if(type=='New') {
//sh.getRange(3,2).setValue(Number(luA[i][2]+quan));
sh2.getRange(i+1,3).setValue(Number(luA[i][2]+quan));
e.source.toast('New');
}
sh.insertColumnAfter(2);
sh.getRange(1,3,4,1).setValues(sh.getRange(1,2,4,1).getValues())
sh.getRange(1,2,4,1).clearContent();
}
}
}
}
这是我的Sheet1和Sheet2的外观。 Sheet2中的每个项目都以100开头。
Sheet1:
Sheet2:
如果您从未使用过onEdit(e)函数,则e是一个参数,该参数保存事件对象的数据,当您获得事件触发器时,该事件对象会加载数据。因此,您无法从脚本编辑器运行此功能。您必须复制它,并通过填写SKU,类型和数量的值在第2列中进行适当的编辑。
希望此示例将为您提供一些有关如何进行的见解。