【问题标题】:inventory using google sheet使用谷歌表的库存
【发布时间】:2018-08-14 17:49:50
【问题描述】:

我是一家企业,我使用 Gas 进行确认和管理,买家在我的商店购买了一些东西后,如果买家接受订单,我会打电话确认下单,我会在订单表的 C 列上写上 ok,我的代码会确定来自工作表 Inventory 的产品,并将减去从工作表 Order 上的 D 列创建的产品。但是我的代码运行时间很长,我不希望这样,例如,当我的两个员工同时打电话并且他们同时放好 GAS 不能计算速度足够快,它只是负 1,谁可以帮助我提高代码的运行时间或有其他解决方案。 这是我的代码

function onEdit(e) {
    var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('DATA');
    var range = e.range;
    var s = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Inventory");
    var i, j;
    if (range.getColumn() == 3 && (range.getValue() == "ok" || range.getValue() == "cancel")) {
      var fullListStr = ss.getRange(range.getRow(), 4).getValue();
      var listShirts = fullListStr.split(",");
      for (i = 0; i < listShirts.length; i++) {
        listShirts[i] = listShirts[i].trim();
      }
      var listCheck = s.getRange("F1:F5").getValues();
      for (i = 0; i < listShirts.length; i++) {
        for (j = 1; j < listCheck.length; i++) {
          if (listShirts[i] == listCheck[j][0]) {
            var row = j + 1;
            var column = 5;
            var currentProduct = s.getRange(row, column).getValue();
            currentProduct--;
            s.getRange(row, column).setValue(currentProduct);
            break;
          }
        }
      }
//    var currentProduct = s.getRange(2, 5).getValue();
//      currentProduct--;
//      s.getRange(2, 5).setValue(currentProduct);
      Logger.log(currentProduct)
      Logger.log(listShirts);
      Logger.log(listCheck);
    }
}

这是我的床单

【问题讨论】:

  • 什么是“很长时间”?
  • 您需要在代码中添加一些 cmets,如果可以的话,您的电子表格的链接也可能有用。
  • @JayJenkins 对不起,我是新手,1 个月前我才刚刚学习编码

标签: google-apps-script google-sheets


【解决方案1】:
  • 不需要第一个“for”循环。您可以将trim() 操作组合到另一个“for”循环中。
  • 不需要内部的“for”循环。将衬衫 ID 的二维数组转换为一维数组,然后搜索衬衫 ID 的索引。衬衫ID的索引等于行号加一。
  • 不要在“for”循环中获取长度 - 定义长度并分配一次。
  • 您的列号是静态的,不需要在每个循环中都分配。
  • 您可以通过检查列号并在编辑不在正确列中时停止代码来摆脱一层嵌套块

我没有测试过这段代码。我只是把它扔在一起。但它应该为您提供改进它所需的概念。

代码:

function onEdit(e) {
  var arrayListCheckIDs,column, currentProduct, i, j, L, range, row, s, ss, thisShirt;

  column = 5;

  ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('DATA');
  range = e.range;
  s = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Inventory");


  if (range.getColumn() !== 3) {return;}
  if (range.getValue() !== "ok" || range.getValue() !== "cancel") {return;}


  var fullListStr = ss.getRange(range.getRow(), 4).getValue();

  var listShirts = fullListStr.split(",");

  L = listShirts.length;


      var listCheck = s.getRange("F1:F5").getValues();

  arrayListCheckIDs = listCheck.toString().split(",");//Convert 2D array to 1D array

      for (i = 0; i < L; i++) {

        thisShirt = listShirts[i].trim();

        row = arrayListCheckIDs.indexOf(thisShirt) + 1;

        if (row === -1) {continue;}//There was no shirt ID found in the array of shirt IDs

            currentProduct = s.getRange(row, column).getValue();
            currentProduct--;
            s.getRange(row, column).setValue(currentProduct);
            break;
      }
//    var currentProduct = s.getRange(2, 5).getValue();
//      currentProduct--;
//      s.getRange(2, 5).setValue(currentProduct);
      Logger.log(currentProduct)
      Logger.log(listShirts);
      Logger.log(listCheck);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2019-08-14
    相关资源
    最近更新 更多