我试图在A列中实现唯一标识符。为此,我倾向于此处讨论的解决方案:Auto incrementing Job Reference(使用Utilities.formatString() Google表格。
为了便于阅读,这是我当前的脚本(我对原始脚本进行了一些细微的修改):
function Identifier(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName("Epics");
var startcell = sh.getRange('A2').getValue();
var colValues = sh.getRange('A2: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 the 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).setValue(Utilities.formatString('E%04d',max));// and write it back to sheet's last row.
}
原始功能旨在使用触发器'在表单提交'但是我只需要在我的工作表中添加新行时触发此逻辑。触发'开启编辑'因为这样,每次对工作表的更改都会导致最后一个ID被下一个新ID覆盖。
如何在Googlesheet中添加新行时确保只调用我的函数?
编辑[2015年1月20日] 与此同时,我在某种程度上改编了剧本:
function Identifier(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName("Epics");
var r = ss.getActiveRange();
var editRow = parseInt(r.getRow()); // get the row the edit happend on
var lastRow = ss.getLastRow();
var startcell = sh.getRange('A2').getValue();
var colValues = sh.getRange('A2:A').getValues();// get all the values in column A in an array
var max=0;// define the max variable to a minimal value
if(lastRow == editRow){
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 the 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).setValue(Utilities.formatString('E%04d',max));// and write it back to sheet's last row.
}
}
这几乎按预期工作。还是要解决:
使用上面的脚本,最后的ID字段会随着每次更新到工作表的最后一行而更新。我需要修改上面的脚本,以便最后一行的更新不会产生新的ID。 (必须)
在现有范围中插入新行时,脚本当前无法识别此行。 (很高兴)
答案 0 :(得分:0)
我一直在研究这些方面的内容,我可以帮助你解决部分问题。您可以创建已安装的触发器,并在插入行时使用OnChange事件来触发。
function myFunction(event){
if(event.changeType=='INSERT_ROW'){
// do Something
}
}
我仍在尝试找到获取插入行位置的答案。