【问题标题】:Auto incrementing Job Reference自动递增作业参考
【发布时间】:2013-03-14 17:02:53
【问题描述】:

我是编写代码的新手,理解有限,所以请温柔! 我一直在尝试扩展 this question 上的代码。

我取得了有限的成功,现在陷入困境,我希望有人能善意地指出我正确的方向或告诉我我做错了什么。

因此,场景:需要有一个自动递增的“工作参考”,以便为我工作的 IT 部门预订上网本维修。此预订是通过 Google 表单进行的,我可以让链接中的代码完美运行,但是!我希望不仅仅是一个简单的计数 - 1,2,3,4,5 等等。理想情况下,作业参考将显示为 JR0001、JR0002 等。

所以,我的代码尝试!

用户:自己提交的代码完美运行。

function onFormSubmit(e) {
  // Get the active sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  // Get the active row
  var row = sheet.getActiveCell().getRowIndex();
  // Get the next ID value.  NOTE: This cell should be set to: =MAX(A:A)+1
  var id = sheet.getRange("P1").getValue();
  // Check of ID column is empty
  if (sheet.getRange(row, 1).getValue() == "") {
    // Set new ID value
    sheet.getRange(row, 1).setValue(id);
  }
}

我尝试的第一件事是简单地添加另一个变量并将其添加到 .setValue

function onFormSubmit(e) {
   // Get the active sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  // Get the active row
  var row = sheet.getActiveCell().getRowIndex();
  // Get the next ID value.  NOTE: This cell should be set to: =MAX(A:A)+1
  var id = sheet.getRange("X1").getValue();
  // Set Job Reference
  var jobref = "JR";
  // Check of ID column is empty
  if (sheet.getRange(row, 1).getValue() == "") {
  // Set new ID value
    sheet.getRange(row, 1).setValue(jobref+id);
  }
}

这在获得“JR1”而不是 1 时起作用,但自动增量停止工作,因此对于提交的每个表单我仍然有“JR1” - 不是真正的自动增量!

然后我尝试从工作表中设置另一个 .getValue 作为 Job Ref

function onFormSubmit(e) {
   // Get the active sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  // Get the active row
  var row = sheet.getActiveCell().getRowIndex();
  // Get the next ID value.  NOTE: This cell should be set to: =MAX(A:A)+1
  var id = sheet.getRange("X1").getValue();
  // Set Job Reference
  var jobref = sheet.getRange("X2").getValue();
  // Check of ID column is empty
  if (sheet.getRange(row, 1).getValue() == "") {
  // Set new ID value
    sheet.getRange(row, 1).setValue(jobref+id);
  }
}

同样的结果 - 一个非递增的“JR1”

然后我尝试将工作递增数字与我的工作参考单元格连接起来,然后在脚本中调用它。

function onFormSubmit(e) {
  // Get the active sheet
  var sheet = SpreadsheetApp.getActiveSheet();
  // Set Job Reference
  var jobref = sheet.getRange("X2").getValue();
  // Get the active row
  var row = sheet.getActiveCell().getRowIndex();
  // Get the next ID value.  NOTE: This cell should be set to: =MAX(A:A)+1
  var id = sheet.getRange("X1").getValue();
  // Check of ID column is empty
  if (sheet.getRange(row, 1).getValue() == "") {
  // Set new ID value
    sheet.getRange(row, 1).setValue(jobref);
  }
}

相同的结果值不会增加

如果我添加其他变量并且不明白如何将前导零添加到递增的数字,我不明白为什么数字会停止递增。我觉得我试图把事情复杂化!

所以总结一下,有没有办法获得一个 6 个字符长的自动递增 ref - 在这种情况下,首先形成 JR0001,然后提交 JR0002,依此类推。

如果可能的话,我真的很想知道我哪里出错了,我确实想学习,但我显然错过了一些关键原则。

【问题讨论】:

    标签: google-apps-script google-sheets google-forms


    【解决方案1】:

    这是一个使用 GAS 团队几天前刚刚添加的“全新”Utilities.formatString() 的工作解决方案 ;-)

    function OnForm(){
    var sh = SpreadsheetApp.getActiveSheet()
    var startcell = sh.getRange('A1').getValue();
    if(! startcell){sh.getRange('A1').setValue(1);return}; // this is only to handle initial situation when A1 is empty.
    var colValues = sh.getRange('A1:A').getValues();// get all the values in column A in an array
    var max=0;// define the max variable to a minimal value
      for(var r in colValues){ // iterate the array
        var vv=colValues[r][0].toString().replace(/[^0-9]/g,'');// remove the letters from the string to convert to number
        if(Number(vv)>max){max=vv};// get the highest numeric value in th column, no matter what happens in the column... this runs at array level so it is very fast
        }
        max++ ; // increment to be 1 above max value
    sh.getRange(sh.getLastRow()+1, 1).setValue(Utilities.formatString('JR%06d',max));// and write it back to sheet's last row.
    }
    

    【讨论】:

    • 先生是个天才!我确实稍微编辑了您的代码:第 12 行我删除了 +1,以便 Job Ref 填充在与表单提交相同的行上,并将字符串更改为 'JR%04d',这样我就有 2 个字母和 4 个数字 -我希望永远不必修理 9999 台笔记本电脑:D
    • 我以为你能修复至少一百万...我很失望 ;-D - 请考虑也接受答案,感谢您的投票。
    猜你喜欢
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2016-03-07
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多