Javascript. Расширение строки чисел

Мой сценарий находится в документе электронной таблицы Google Вот мой сценарий:

ss = SpreadsheetApp.getActiveSpreadsheet ();

function onOpen() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "10 Rows", functionName: "TenRows"},
                      {name: "20 Rows", functionName: "TwentyRows"},
                      {name: "30 Rows", functionName: "ThirtyRows"},
                      {name: "40 Rows", functionName: "FortyRows"},
                      {name: "50 Rows", functionName: "FiftyRows"}]                      
   ss.addMenu("Insert Rows", menuEntries);
 }


 function TenRows() {
  SpreadsheetApp.getActiveSheet().insertRowsBefore(2,10);
 }

 function TwentyRows() {
  SpreadsheetApp.getActiveSheet().insertRowsBefore(2,20);
 }

 function ThirtyRows() {
  SpreadsheetApp.getActiveSheet().insertRowsBefore(2,30);
 }

 function FortyRows() {
  SpreadsheetApp.getActiveSheet().insertRowsBefore(2,40);
 }

 function FiftyRows() {
  SpreadsheetApp.getActiveSheet().insertRowsBefore(2,50);
 }

В столбце C моей таблицы у меня есть строка чисел, идущая вниз по каждой строке.

Нравится

 C
7317
7316
7315
7314
7313

Когда я запускаю свой скрипт для вставки ряда строк, как мне сделать так, чтобы он автоматически продолжал это возрастающее число и вводил его в столбец C?

Спасибо


person David    schedule 04.12.2010    source источник


Ответы (1)


Я, очевидно, не могу дать вам код, не видя его целиком, но я могу дать вам совет, как его решить:

  1. Перед вставкой новых строк сохраните число, которое было в строке, после которой будут вставлены новые строки, в переменную, например. lastNumber = parseInt(insertRowColumnC.getValue()) обязательно используйте parseInt для преобразования строки в число (!)
  2. Вставьте новые строки
  3. Теперь перебираем все вновь вставленные строки сверху вниз.
  4. В каждой строке вы сначала уменьшаете lastNumber на единицу, а затем записываете его значение в столбец C этой строки.

Обновить

Посмотрев на электронную таблицу, я потратил несколько минут и придумал этот фрагмент кода:

function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var r = e.source.getActiveRange();
  if (r.getColumn() == 3 && r.getRow() == 2) {
    var value = parseInt(r.getValue());
    if (!isNaN(value)) {
      var next = getFirstRowNumber(sheet);
      if (value > next) {
        var count = value - next;
        sheet.insertRowsAfter(2, count);
        for(var i = 2; i < 2 + count; i++) {
          sheet.getRange(i + 1, 3).setValue(value);
          value--;
        }
        r.setValue('');

      } else {
         r.setValue('');
         Browser.msgBox('You need to enter a greater ID.');
      }
    } else if (r.getValue() !== '') {
      r.setValue('');
      Browser.msgBox('You need to enter a valid ID.');
    }
  }
}

Ваш вопрос был немного неясным, но это работает так, как вы хотите.

Каждый раз, когда кто-то вставляет новый идентификатор в 2 / C, отсутствующие идентификаторы между новым идентификатором и идентификатором в 3 / C вставляются автоматически.

person Ivo Wetzel    schedule 04.12.2010
comment
Иво, могу ли я как-нибудь поделиться с вами документом. Я не уверен, что знаю, как это реализовать. - person David; 04.12.2010