Как получить часть строки при конкатенации? - PullRequest
0 голосов
/ 09 мая 2020

Чтобы улучшить скорость загрузки моей листовой страницы, я бы попытался преобразовать приведенную ниже функцию в скрипт. На самом деле с помощью Chrome DevTools я попытался удалить столбец с этой функцией внутри, и скорость страницы значительно увеличилась с 35 se c до 14 se c.

функция:
={"ID"; arrayformula(IF(C2:C="";;(LEFT(C2:C;1))&"-"&(LEFT(D2:D;1))&(LEFT(E2:E;1))&"-"&(UPPER(RIGHT(B2:B;8)))))}

Я не знаю, как объединить только первый символ столбца C, первый символ столбца D, первый символ столбца E и последние восемь символов столбца B. Как запустить скрипт только при наличии записи или обновления значений в столбцах C, D, E, B?

Код Пытался написать:

function concatenate() {
      var sheet = SpreadsheetApp.getActiveSheet();
      var data = sheet.getDataRange().getValues();
      var lr = sheet.getLastRow()
      var values1 = sheet.getSheetValues(2, 4, lr, 1);
      var values2 = sheet.getSheetValues(2, 5, lr, 1);
      var values3 = sheet.getSheetValues(2, 2, lr, 1);
      var results = [];
      for (var i = 0; i < lr; i++) {
        results.push([values1[i] + " " + values2[i] + " " + values3[i]]);
      }
      sheet.getRange(2, 1, results.length).setValues(results);
    }

1 Ответ

1 голос
/ 09 мая 2020

Используйте String.slice, чтобы получить часть строки:

results.push([values1[i][0].slice(0,1) + " " + values2[i][0].slice(0,1) + " " + values3[i][0].slice(-8)]);

Обратите внимание, что values1 - это 2D-массив. Итак, [0] необходим для индексации во внутреннее измерение

...