- Вы хотите расположить столбцы на листе с помощью
var keepColumnsArray = [3,2,1,4,5]
. - Например, вы хотите расположить столбцы от
1, 2, 3, 4, 5
до 3, 2, 1, 4, 5
.
- Вы хотите добиться этого с помощью скрипта Google Apps.
Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
Шаблон 1:
В этом случае используется moveColumns
. Этот сценарий выполняется следующим образом.
- Создание объекта массива, включая исходный индекс и целевой индекс столбцов.
- Сортировка массива.
- столбцы расположены с использованием
moveColumns
.
Пример сценария:
function myFunction() {
var keepColumnsArray = [3,2,1,4,5];
var obj = keepColumnsArray.reduce(function(ar, e, i) {
ar.push({from: i + 1, to: e});
return ar;
}, []);
obj.sort(function(a, b) {return a.to < b.to ? -1 : 1});
var sheet = SpreadsheetApp.getActiveSheet();
obj.forEach(function(o) {
var columnSpec = sheet.getRange(1, o.from);
if (o.from != o.to) sheet.moveColumns(columnSpec, o.to);
for (var j = 0; j < obj.length; j++) {
if (obj[j].from < o.from) obj[j].from += 1;
}
});
}
Шаблон 2:
В этом случае каждый столбец копируется в порядке keepColumnsArray
с использованием временного листа и поместите упорядоченные столбцы на исходный лист.
Пример сценария:
function myFunction() {
var keepColumnsArray = [3,2,1,4,5];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var temp = ss.insertSheet("temp");
sheet.activate();
keepColumnsArray.forEach(function(e, i) {
sheet.getRange(1, e, sheet.getLastRow(), 1).copyTo(temp.getRange(1, i + 1));
});
temp.getDataRange().copyTo(sheet.getRange(1, 1));
ss.deleteSheet(temp);
}
Ссылка:
Добавлено:
Из комментарий OP , В этом примере сценария столбцы вставляются и помещаются упорядоченные столбцы.
Вместо того, чтобы создавать временную таблицу, мы не можем добавить 5 столбцов в начало и затем скопировать их в эти новые столбцы?
Пример сценария:
function myFunction() {
var keepColumnsArray = [3,2,1,4,5];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var offset = keepColumnsArray.length;
sheet.insertColumns(1, offset);
keepColumnsArray.forEach(function(e, i) {
sheet.getRange(1, e + offset, sheet.getLastRow(), 1).copyTo(sheet.getRange(1, i + 1));
});
sheet.deleteColumns(offset, offset);
}