如何在满足条件时下移单元格而不删除公式

How to shift down cells without removing formula when meeting conditions

我是一个非常环保的开发人员,试图在 google sheets w/ google 应用程序脚本中制作库存交易程序。我在仓库工作,正在努力使我的工作和操作 运行 比当前系统更好(每个月进行实物盘点)。

有 3 个单元格用于手动输入(SKU、类型/原因、数量),第 4 个单元格在所有 3 个单元格都填写后自动生成时间戳。

填写完所有 4 个单元格后,我希望程序搜索正确的 SKU(所有都是唯一的 #'d),然后通过 + 或 - 更新数量。

我也在考虑减少 +-QTY 上的输入错误,所以也许考虑让 Reason 确定它是否是 +/-。

例如。类型 = S = 已售出 = - 例如。类型 = N = 新单位 = +

库存安排在 google sheet 上,表示 SKU 在货架/货架上的物理位置。

我希望程序也将行向下移动 1 行以留下库存交易历史记录。

enter code here函数 onEdit(e) { var activeSheet = e.source.getActiveSheet(); 变量范围 = 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")

}

我试了一下。我知道您希望将单元格向下移动,但我发现将 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 开头。

工作表 1:

工作表 2:

In case you've never worked with an onEdit(e) function the e is a parameter that hold data from an event object which gets load when you get an event trigger. So you can't run this function from the script editor. You must copy it and the make the appropriate edits in column 2 by filling in the values for SKU, Type and Quantity.

希望这个例子能为您提供一些关于如何继续的见解。