自动递增工作参考(Auto incrementing Job Reference)

2019-07-21 16:05发布

我在写代码很新,有一个有限的了解,所以请温柔! 我一直在努力上取得的代码扩展了这个问题 。

我已经有限的成功,我现在卡住了,我希望有人能好心点我在正确的方向或者告诉我什么,我做错了。

所以,这种情况下:需要有一个自动递增“工作参考”上网本的维修向IT部门我工作的预订。 该预订是通过谷歌表格提出,我可以得到的代码链接到完美,但努力! 我希望能有比简单更个性化一点 - 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

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”

然后我试着与我的工作REF电池串联工作增加数量,然后调用该脚本。

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等。

我真的想上我要去的地方错的,如果可能的话,我也想学,但我显然缺少一些关键原则一些指点。

Answer 1:

这里是使用了“全新”工作解决方案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.
}


文章来源: Auto incrementing Job Reference