Я хочу объединить столбцы, которые являются динамическими, используя программный код appscript.
Посмотрите на скриншот, как выглядят мои данные и какой результат я пытаюсь достичь:
Мне удалось достичь конкатенации статического/фиксированного номера. столбцов, используя приведенный ниже код.
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. Я старался изо всех сил разобраться, но тщетно. Любая помощь будет очень признательна.
Я считаю, что вы можете решить эту проблему, просто перебирая столбцы, используя последнюю переменную индекса столбца 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);
};
};
.getValues()
Скрещивание в другом столбце
Это предполагает, что вы начинаете с только своих столбцов данных и что вы не добавили заголовок для нового столбца. Это может быть сделано для работы в обоих направлениях, но вам просто нужно знать, с чего начать.
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);
}
[i]
из первого vA
в каждой строке оператора if