连接时如何获取字符串的一部分?

为了提高工作表页面的加载速度,我尝试将下面的函数转换为脚本。实际上,使用Chrome DevTools,我试图删除带有此功能的列,并且页面速度已从35秒显着提高到14秒。

The function:
={"ID"; arrayformula(IF(C2:C="";;(LEFT(C2:C;1))&"-"&(LEFT(D2:D;1))&(LEFT(E2:E;1))&"-"&(UPPER(RIGHT(B2:B;8)))))}

我不知道如何仅连接col C的第一个字符,col D的第一个字符,col E的第一个字符和col 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);
    }<br>

更新: 我已经尝试过使用string.slice,但是某些方法不起作用。

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