1

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

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

所以,场景:需要有一个自动递增的“工作参考”来预订我工作的 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,依此类推。

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

4

1 回答 1

3

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

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.
}
于 2013-03-15T09:25:15.763 回答