2014-01-15 7 views
2

이제는이 사이트에서 너무 많은 질문을하고있는듯한 느낌입니다 :). 그러나이 질문을 제기 한 것처럼 보입니다. 그들이 그랬다면 저를 거기에 연결하십시오.Google 스프레드 시트의 열 이동

같은 시트에서 특정 열을 다른 열 (이전 또는 다른 열)로 이동하기 만하면됩니다. 숨기기, 삽입, 삭제 등의 옵션을 볼 수 있습니다.하지만 움직이는 것만 큼 중요한 것은 없습니다.

실제로 열 데이터의 범위를 가져온 다음 복사하여 열을 삭제하고 원하는 위치에 열을 삽입하고 범위를 얻은 다음 데이터를 붙여 넣으십시오.

예 : G 말 이전에

Col A B C D E F G H 
    1 2 3 4 5 6 7 8 
    9 10 11 12 13 14 15 16 

이동 열 B :

Col A B C D E F G H 
    1 3 4 5 6 2 7 8 
    9 11 12 13 14 10 15 16 

답변

2

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; 
} 
+0

니스,이를 좋아합니다. 그것은 내 작업 시간에 비해 계산 시간을 단축시킵니다. – ssurendr

2

내가 이전에 말했듯이 그 일을 제외하고는 다른 방법이없는 것 같아요. 나는 똑같은 것을 요구하는 사람들이 그것을 필요로한다면, 여기에 내가 만든 기능이있다. 이 행을 쉽게 수정할 수 있습니다. 저는 Apps Script를 처음 사용하기 때문에 이보다 더 쉬운 코드가있을 수 있습니다.

function moveColumn(iniCol, finCol) { 
    // iniCol - Column of interest. (Integer) 
    // finCol - Column where you move your initial column in front of.(Integer) 
    // Ex: 
    // Col A B C D E 
    //  1 2 3 4 5 
    //  6 7 8 9 10 
    //  11 12 13 14 
    // Want to move Column B in between Column D/E. 
    // moveColumn(2,4); 
    // Col A B C D E 
    //  1 3 4 2 5 
    //  6 8 9 7 10 
    //  11 12 13 14 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sh = ss.getActiveSheet(); 
    var lRow = sh.getMaxRows(); 
    if (finCol > iniCol) { 
    sh.insertColumnAfter(finCol); 
    var iniRange = sh.getRange(1, iniCol, lRow); 
    var finRange = sh.getRange(1, finCol + 1, lRow); 
    iniRange.copyTo(finRange, {contentsOnly:true}); 
    sh.deleteColumn(iniCol); 
    } 
    else { 
    sh.insertColumnAfter(finCol); 
    var iniRange = sh.getRange(1, iniCol + 1, lRow); 
    var finRange = sh.getRange(1, finCol + 1, lRow); 
    iniRange.copyTo(finRange, {contentsOnly:true}); 
    sh.deleteColumn(iniCol + 1);  
    } 
} 

Google 프론트 엔드의 Google 스프레드 시트에서 프로그래밍 방식으로 수행 할 수있는 작업이 이상적이라고 생각했습니다. (열이나 행을 이동하는 것과 같습니다.)

0

: (기본에 대한 감사 @ssurendr)

function replaceColumn(Col1, Col2) { 
// Ex: 
// Col A B C D E 
//  1 2 3 4 5 
//  6 7 8 9 10 
//  11 12 13 14 
// Want to replace Column B & D. 
// moveColumn(2,4); 
// Col A D C B E 
//  1 4 3 2 5 
//  6 9 8 7 10 
//  11 13 12 14 
if (Col2 > Col1) { 
    sh.insertColumnAfter(Col1); 
    var iniAftRa = sh.getRange(1, Col2+1, lRow); 
    var finRange = sh.getRange(1, Col1, lRow); 
    var finColAftRange = sh.getRange(1, Col1+1, lRow); 
    finRange.copyTo(finColAftRange, {contentsOnly:true}); 
    iniAftRa.copyTo(finRange, {contentrsOnly:true}); 
    finColAftRange.copyTo(iniAftRa, {contentrsOnly:true}); 
    sh.deleteColumn(Col1 + 1); 
} else { 
    sh.insertColumnAfter(Col2); 
    var iniAftRa = sh.getRange(1, Col1+1, lRow); 
    var finRange = sh.getRange(1, Col2, lRow); 
    var finColAftRange = sh.getRange(1, Col2+1, lRow); 
    finRange.copyTo(finColAftRange, {contentsOnly:true}); 
    iniAftRa.copyTo(finRange, {contentrsOnly:true}); 
    finColAftRange.copyTo(iniAftRa, {contentrsOnly:true}); 
    sh.deleteColumn(Col2 + 1);  
} 
} 
관련 문제