Esta fórmula de aplicaciones de Google (Javascript) funciona perfectamente para mover datos a pestañas regionales. ¿Hay alguna forma de traer las fórmulas y la validación de datos a las hojas nuevas? Las columnas 1-18 son todas fórmulas y actualmente solo se completan con valores. Me gustaría mantener las fórmulas para la columna 1-18 y la validación de datos para las columnas restantes.
function createSheets() { const ss = SpreadsheetApp.getActive() const ssh = ss.getSheetByName("Forecast (SQL) Validation"); const regions = ssh.getRange(3, 24, ssh.getLastRow() - 2, 1).getValues().flat(); const urA = [...new Set(regions)]; const shnames = ss.getSheets().map(s => s.getName()) let ws; urA.forEach(region => { let idx = shnames.indexOf(region); if (~idx) { ss.deleteSheet(ss.getSheetByName(shnames[idx]));//if it does exist delete it and create a new one }//if it does not exist create a new one ws = null; if(region.length>0) { ws = ss.insertSheet("R"+region.split("-")[0]); ws.getRange("A2").setFormula(`=FILTER('Forecast (SQL) Validation'!A3:CR,'Forecast (SQL) Validation'!X3:X="${region}")`) ssh.getRange("A2:CR2").copyTo(ws.getRange("A1:CR1")) ws.hideColumns(2,2) ws.hideColumns(6,11) } }) }Me doy cuenta de que está utilizando el método copyTo , debería funcionar y proporcionarle tanto la fórmula como los valores:
Copia los datos de un rango de celdas a otro rango de celdas. De forma predeterminada, tanto los valores como el formato se copian, pero esto se puede anular con argumentos avanzados. Debería funcionar como se sugiere sobre su código.
Estoy usando algunas de las referencias de discusión que parecen estar relacionadas con su problema. La solución a este error es pasar un objeto apropiado, este hilo tiene una gran discusión sobre el tema y una referencia sobre el uso de " contetnsOnlyTrue "
Edite la idea que se puede hacer en función de esos hilos:
ws.getRange("A2").setFormulasR1C1(`=FILTER('Forecast (SQL) Validation'!A3:CR,'Forecast (SQL) Validation'!X3:X="${region}")`) //adding the formulasr1c1 ssh.getRange("A2:CR2").copyTo(ws.getRange("A1:CR1"), {contentsOnly:true}) //contentsOnly