script google gmailapp getrange app google-apps-script google-spreadsheet

google apps script - google - Pegar valores especiales



getrange google script (2)

Tengo un rango que consta de 3 columnas y 2 (o más) filas. La columna del medio contiene una fórmula: =TRANSPOSE(SPLIT(A1,","))

El script necesita mover (cortar) ese rango en otra hoja como valores , no como fórmulas.

¿Google-apps-script tiene un medio para hacer "PasteSpecial - Values"?

Aquí está la línea que estoy usando actualmente:

sheet1.getRange("F1:H3").moveTo(sheet2.getRange("A1"));

¿Alguien puede decirme cómo puedo bloquear esos valores antes de que pasen a sheet2?

(Para su información: esto solo requiere una solución de código)


Solo como alternativa, puede usar copyTo () con argumentos avanzados para copiar solo valores. Para imitar el efecto de moveTo (), aún necesitaría borrar el rango de origen.

Además, si es más fácil, getRange () acepta una referencia de cadena que incluye el nombre de la hoja. Asi que:

function moveValuesOnly() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var source = ss.getRange(''Sheet1!F1:H3''); source.copyTo(ss.getRange(''Sheet2!A1''), {contentsOnly: true}); source.clear(); }


Use getValues ​​() en el rango fuente y setValues ​​() en el destino. Debe asegurarse de que los rangos tengan las mismas dimensiones. Luego puede borrar () la fuente.

Aquí hay una función de utilidad que hace el trabajo. También está disponible como una esencia . Tenga en cuenta que toma Range Objects como parámetros.

Código

/** * Move all values from source range to destination range. Upon * completion, source range will be cleared. Source values will * be moved into a destination range starting at the "top left" * of the destination range, using the dimensions of the source * range. This is a blind copy, with no overwrite test. * * @param {Range} source Range Object to take values from. * @param {Range} destination Range Object to receive values. * * @returns nothing */ function moveRange(source,destination) { var sourceSheet = source.getSheet(); var destSheet = destination.getSheet(); var sourceData = source.getValues(); var dest = destSheet.getRange( destination.getRow(), // Top row of destination destination.getColumn(), // left col of destination sourceData.length, // # rows in source sourceData[0].length); // # cols in source (elements in first row) dest.setValues(sourceData); source.clear(); }

Función de prueba

Una prueba exitosa borrará todo el rango fuente, y su contenido aparecerá en el rango de destino solo como valores. Las dimensiones de destino coincidirán con las dimensiones de origen, independientemente de lo que se proporcione como destino: solo es la esquina superior izquierda la que ancla el movimiento.

function test_moveRange() { var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; var destSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1]; var source = sourceSheet.getRange("A7:C10"); var destination = destSheet.getRange("C4:H2"); moveRange(source,destination); }