Как автоматически копировать / вставлять данные с помощью App Script в Google Sheets - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь написать некоторый код, используя скрипты приложения, которые (с помощью ежедневного триггера) копируют / вставляют данные из ячеек F13: G13 в первую пустую ячейку в столбце I. Вот мой код:

    function TrackCurrentValues() 

      var spreadsheet = SpreadsheetApp.getActive();
      var sheet = spreadsheet.getSheets()[0];

      var lastRow = getLastRowInColumn(sheet, 'I:I');
      // Logger.log('I' + parseInt(lastRow + 1));

      var pasteRange = sheet.getRange('I' + parseInt(lastRow + 1) );
      pasteRange.activate();

      // now that we have the first empty cell in column I, paste the values we found from cells F13:G13
      spreadsheet.getRange('F13:G13').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

    };

function getLastRowInColumn(sheetObj, range) {
   return sheetObj.getRange(range)
            .getValues().filter (String).length + 1
}

При запуске происходит копирование данных из правильного расположения, но они всегда вставляются в ячейку A1. Кроме того, к вставленному номеру добавляется знак британского фунта стерлингов (£).

Что может быть не так? Это (обычно) работает, если я запускаю его вручную. Главное, что он не находит пустую ячейку в I: I.

1 Ответ

0 голосов
/ 06 июля 2018

Этот код должен делать то, что вы ищете:

function TrackCurrentValues(){
      var sheet = SpreadsheetApp.getActive().getSheets()[0];
      var lastRow = getLastRowInColumn(sheet, 'I:I');
      var pasteRange = sheet.getRange(lastRow + 1,9,1,2);   
      var copyRange = sheet.getRange(13,6,1,2)
      pasteRange.setValues(copyRange.getValues())
    };

function getLastRowInColumn(sheetObj, range) {
   return sheetObj.getRange(range).getValues().filter(String).length
}

На ваш вопрос в £ £ этот диапазон, скорее всего, отформатирован для отображения этого символа валюты. Чтобы обновить это, выберите диапазон, перейдите на панель инструментов и выберите «Формат»> «Число»> «Укажите желаемый формат»

Дополнительные мысли: i) Вы добавляете одну переменную lastRow дважды (один раз в функции getLastRowInCOlumn и снова в определении pasteRange) ii) я бы рекомендовал не использовать «активные диапазоны» для хранения местоположения, а хранить этот диапазон в переменной iii) Кажется, ваш диапазон копий был шириной 2 столбца, а ваш pasteRange был шириной всего 1 столбец

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...