SpreadsheetApp 메서드를 사용하는 것보다 훨씬 빠른 방법이 있습니다. 복사/삭제/삽입/붙여 넣기 작업 대신 전체 시트 사본을 한 번에 가져 와서 메모리에서 수정 한 다음 수정 된 데이터를 다시 쓸 수 있습니다.
ssurendr의 대답과 동일한 서명이있는 moveColumn()
함수로 시작합니다. 그러나 스프레드 시트 데이터를 읽고 일반 자바 스크립트 함수로 조작 한 다음 시트에 결과를 다시 써주는 것입니다.
/**
* Move column in current spreadsheet
*
* @param {int} iniCol Source column index (1-based)
* @param {int} finCol Destination column index (1-based)
*/
function moveColumn(iniCol, finCol) {
var dataRange = SpreadsheetApp.getActiveSheet().getDataRange();
var data = arrayMoveColumn(dataRange.getValues(), iniCol - 1, finCol - 1);
dataRange.setValues(data);
}
다음 함수 인 arrayMoveColumn()
은 Google 스프레드 시트에만 국한되지 않습니다. 임의의 2 차원 배열에서 열을 이동합니다. Javascript 배열은 0
부터 시작하며 스프레드 시트 메서드는 1-based
인덱스를 사용합니다. 기본 오류 검사가 추가되었지만 바보가 아닙니다.
이 기능의 핵심 요소는 배열의 요소를 제거하고 삽입하는 데 사용되는 Array.splice() 메서드입니다. 누군가가 두 개의 열 교체하고자하는 경우
/**
* Move content of a "column" in a 2-d Array.
*
* @param {array} data Two-dimensional matrix (array with no null values)
* Array content is changed by this function.
* @param {int} from Source column index (0-based)
* @param {int} to Destination column index (0-based)
*
* @return {array} Resulting array (for chaining)
*/
function arrayMoveColumn(data, from, to) {
// Parameter error checking
if (!(data instanceof Array && data[0] instanceof Array)) throw new TypeError('need 2d array');
if (from >= data[0].length || to >= data[0].length) throw new Error('index out of bounds');
for (var row=0; row<data.length; row++) {
var temp = data[row].splice(from, 1); // take 'from'
data[row].splice(to, 0, temp[0]); // put 'to'
}
return data;
}
니스,이를 좋아합니다. 그것은 내 작업 시간에 비해 계산 시간을 단축시킵니다. – ssurendr