объединить динамические столбцы с помощью Google Appscript

1

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

Посмотрите на скриншот, как выглядят мои данные и какой результат я пытаюсь достичь:

Изображение 174551

Мне удалось достичь конкатенации статического/фиксированного номера. столбцов, используя приведенный ниже код.

function concatenate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = ss.getSheetByName("Sheet1");
  var lr = sheetName.getLastRow();
  var lc = sheetName.getLastColumn();
  var rangeValue = sheetName.getRange(2, 1, lr-1, lc).getValues();

  for(var i=0;i<rangeValue.length; i++) {
      var setRange = sheetName.getRange(i+2, lc);
      setRange.setValue(rangeValue[i][0] + " " + rangeValue[i][1] + " " + rangeValue[i][2])
  };
};

Все, что я хочу достичь, это то же самое для столбцов DYNAMIC. Я старался изо всех сил разобраться, но тщетно. Любая помощь будет очень признательна.

  • 0
    Получаете ли вы какие-либо ошибки при попытке запустить это?
  • 0
    @PhillipThomas Приведенный выше код не выдает никакой ошибки, и выводит так же, как столбец D на моем скриншоте. Ситуация такова, что столбец данных является динамическим и может иметь больше столбцов, и как мне обработать это программно.
Теги:
google-apps-script
google-sheets-api

2 ответа

0

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

function concatenate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = ss.getSheetByName("Sheet1");
  var lr = sheetName.getLastRow();
  var lc = sheetName.getLastColumn();
  var rangeValue = sheetName.getRange(2, 1, lr-1, lc).getValues();

  for(var i = 0; i < rangeValue.length; i++) {
    var catValues = "";
    for (var j = 0; j < lc; j++) {
      catValues += rangeValue[i][j] + " ";
    }
    var setRange = sheetName.getRange(i+2, lc);
    setRange.setValue(catValues);
  };
};

Или если вы хотите получить представление о .join():

function concatenate() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = ss.getSheetByName("Sheet1");
  var lr = sheetName.getLastRow();
  var lc = sheetName.getLastColumn();
  var rangeValue = sheetName.getRange(2, 1, lr-1, lc).getValues();

  for(var i = 0; i < rangeValue.length; i++) {
    var catValues = sheetName.getRange(i, lc).getValues().join(" ");
    var setRange = sheetName.getRange(i+2, lc);
    setRange.setValue(catValues);
  };
};
  • 0
    @Philip Thomas Цикл по столбцам с использованием индекса столбца lc работал нормально. Однако .join () выдал следующую ошибку: TypeError: Не удалось найти функцию join в объекте Range.
  • 0
    @Bala Ой, это должно быть исправлено путем добавления .getValues()
Показать ещё 3 комментария
0

Скрещивание в другом столбце

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

function myFunction() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet 1');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  for(var i=0;i<vA.length;i++){
    if(i==0){
      vA[i].splice(vA[i].length,0,'Concatenate');
    }else{
      vA[i].splice(vA[i].length,0,vA[i].join(' '));
    }
  }
  sh.getRange(1,1,vA.length,vA[0].length).setValues(vA);
}
  • 0
    Спасибо Купер за ваш своевременный ответ. Я проверил, но он выдал следующую ошибку: TypeError: Не удается найти функцию соединения в объекте, как ты, как дела.
  • 0
    Попробуйте снова. Я оставил [i] из первого vA в каждой строке оператора if
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню