满足条件时如何在不删除公式的情况下向下移动单元格

时间:2019-10-11 15:43:20

标签: javascript google-apps-script google-sheets inventory-management

我是一位非常环保的开发人员,试图在带有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")

}

1 个答案:

答案 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:

enter image description here

Sheet2:

enter image description here

  

如果您从未使用过onEdit(e)函数,则e是一个参数,该参数保存事件对象的数据,当您获得事件触发器时,该事件对象会加载数据。因此,您无法从脚本编辑器运行此功能。您必须复制它,并通过填写SKU,类型和数量的值在第2列中进行适当的编辑。

希望此示例将为您提供一些有关如何进行的见解。

相关问题