2012-07-27 3 views
1

이 예는 쉬운 예 또는 아니요이어야합니다. 데이터 유효성 검사 을 Google Apps Script에 붙여 넣을 수 있습니까?Google Apps Script를 사용하여 데이터 유효성 검사 붙여 넣기

코드에서 활성 셀 위 행의 데이터 유효성 검사를 복사 한 다음 데이터 유효성 검사를 활성 셀 행에 붙여 넣으십시오. 분명히 - -

function updateFormat() { 
    var rowNumber = SpreadsheetApp.getActiveSpreadsheet().getActiveSelection().getRow(); 
    var rowAbove = rowNumber -1 ; 
    var targetRange = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(rowNumber, 1, 1, 36);  
    var templateRange = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange(rowAbove, 1, 1, 36); 

    templateRange.copyTo(targetRange); 
} 

하지만, 데이터 유효성 검사 내용 목표되지 않습니다 위의 행의을 복사 한 :

나는 사항 copyTo을 시도했다.

아이디어가 있으십니까?

미리 감사드립니다. 제

답변

3

optArgument {formatOnly : true}를 추가하면 작동합니다 (See Ref). 그래서

templateRange.copyTo(targetRange); 

templateRange.copyTo(targetRange, {formatOnly:true}); 

하게 나는 약간의 코드를 리팩토링했는데 사용하여 테스트 :

function updateFormat() { 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var rowNumber = sheet.getActiveSelection().getRow(); 
    var rowAbove = rowNumber -1 ; 
    var maxCols = sheet.getMaxColumns(); 
    var rangeToCopy = sheet.getRange(rowAbove, 1, 1, maxCols); 
    rangeToCopy.copyTo(sheet.getRange(rowNumber, 1, 1, maxCols), {formatOnly:true}); 
} 
+0

mhawksey, 너는 남자 야! optArgument를 추가하는 것은 내가 원한 정확하게 수행했다. 감사! – doebtown

0

하지만 당신은 그것을 통해 템플릿을 복사하기 전에 해결 방법으로, 당신은 예를 들어, 특정 공식을 사용하여 복원, 당신의 targetRange의 다른 모든 값, 수식 및 서식을 읽을 수 setFormula, setValue 등. 기본적으로 템플릿에서 데이터 유효성 검사 만 남깁니다.

0
/** 
* Copia en la fila nueva el formato y validaciones de la fila maestra, es decir, 
* la cabecera si index = 1 o la que prefiramos, si no expecificamos index, cuando 
* insertamos al final coge de maestra la anterior y al principo coge la siguiente. 
* @example function onEdit() { updateRules(); } 
**/ 
function sheetRowRules(index) 
{ 
    var spread = SpreadsheetApp.getActive(); 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var row = sheet.getActiveCell().getRowIndex(); 
    var cols = sheet.getMaxColumns(); 

    if (index) 
    var i = index; 
    else if (row > 2) 
    var i = row-1; // anterior 
    else 
    var i = row+1; // siguiente a la cabecera 
    var rg  = sheet.getRange(i, 1, 1, cols); 
    var rango = sheet.getRange(row, 1, 1, cols); 

    // Copia el formato del anterior registro al actual y fórmulas de celdas para conservar validaciones de datos 
    rg.copyTo(rango, {formatOnly:true}); 
    var formulas = rg.getFormulasR1C1().toString().split(","); 

    //rango.setFormulasR1C1(formulas); // borra los valores, por eso así: 
    for (var n = 0; n < formulas.length; i++) 
    { 
    if (formulas[n].length) 
    { 
     var col = n+1; 
     var rango = sheet.getRange(row, col, 1, 1); 
     rango.setFormulaR1C1(formulas[n]); 
    } 
    } 
    spread.toast("Formatos y fórmulas del replicados de "+i+" al registro "+row); 
} 
+0

불쾌감은 없지만이 사이트는 영어로 말하기 때문에 스페인어로 쓰지 않아도됩니다. 많은 사람들이 영어 원어민이 아니지만 그들은 노력합니다! –

0

그냥 기록을 위해, 나는 new validation class에가 있다고 생각 이러한 문제를 해결하십시오.

관련 문제