自动递增作业参考

时间:2013-03-14 17:02:54

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

我是非常擅长编写代码并且理解有限,所以请保持温和! 我一直在努力扩展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个字符的自动递增引用 - 在这种情况下,首先形成JR0001第二个提交JR0002,依此类推。

如果可能的话,我真的想要一些指示我出错的地方,我确实想学习,但我显然缺少一些关键原则。

1 个答案:

答案 0 :(得分:3)

这是一个使用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.
}