2013-03-14 5 views
1

Я очень новичок в написании кода и имею ограниченное понимание, поэтому, пожалуйста, будьте нежны! Я пытался расширить код, сделанный на this question.Auto incrementing Job Reference

У меня был ограниченный успех, и я теперь застрял, я надеялся, что кто-то будет достаточно любезен, чтобы указать мне в правильном направлении или сказать мне, что я делаю неправильно.

Итак, сценарий: необходимо иметь автоинкрементный «Справочник по заданию» для бронирования в нетбуке для ремонта ИТ-отдела, над которым я работаю. Это бронирование осуществляется через форму Google, и я могу получить код в ссылке, чтобы работать отлично, но! Я надеялся получить чуть больше простого счета - 1,2,3,4,5 и так далее. В идеале работа ref будет отображаться как 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»

Затем я попытался конкатенацией работать увеличивающееся число с моей работой 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 и так далее.

Мне бы очень хотелось, чтобы некоторые указатели указывали, где я ошибаюсь, если это возможно, я хочу учиться, но я, очевидно, не хватает некоторых ключевых принципов.

ответ

3

здесь рабочее решение, которое использует «новенький» 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. 
} 
+0

Вы сэр гений! –

+0

ou Сэр - гений! Я немного изменил код: строка 12 Я удалил +1, чтобы Job Ref заполнил ту же строку, что и форму, и также изменил строку на «JR% 04d», так что у меня есть 2 буквы и 4 цифры - Я надеюсь, что никогда не придется ремонтировать ноутбуки 9999: D –

+0

Я думал, что вы можете отремонтировать хотя бы один миллион ... Я очень разочарован; -D - пожалуйста, подумайте о том, чтобы принять ответ и спасибо за голосование. –

Смежные вопросы