Copiar un rango y pegar valores en todas las sub hojas, tenemos el código para una hoja
Tenemos un script de google que está funcionando bien para una sub hoja (Nombre de la hoja sub - Candy), pero cómo podemos ejecutarlo para toda otra sub hoja, Otro Nombre de la hoja sub es Leno, Sam, Gnito, Param, Ning
En All Sub Sheet Cell en Cell D37 hemos puesto un filtro a través del cual estamos obteniendo el valor en Cell D37:M41, ahora queremos convertirlo en "Formula to Value"
Código
function CopyValue() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Candy'), true);
spreadsheet.getRange('D37').activate();
spreadsheet.getRange('D37:M41').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.getRange('D37:M41').activate();
spreadsheet.getActiveRangeList().setFontSize(10)
.setFontFamily(null)
.clearFormat()
.setHorizontalAlignment('center')
.setVerticalAlignment('middle');
spreadsheet.getRange('D37:D41').activate();
spreadsheet.getRange('D37').activate();
}
Pregunta hecha hace 3 años, 4 meses, 27 días - Por javajedi
3 Respuestas:
-
Usar un
for
lazo oforEach
A continuación mostro su código adaptado con
forEach
// This function copies and pastes the ranges. function copyRanges(sheet) { // Copy pasting your code here: sheet.getRange("D37").activate(); sheet .getRange("D37:M41") .copyTo( sheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false ); sheet.getRange("D37:M41").activate(); sheet .getActiveRangeList() .clearFormat() .setHorizontalAlignment("center") .setVerticalAlignment("middle"); } // This function selects the sheets. function updateSheets(sheetArray = null) { var spreadsheet = SpreadsheetApp.getActive(); let sheets = spreadsheet.getSheets(); if (sheetArray != null) { sheets = sheets.filter((sheet) => { let name = sheet.getName(); return sheetArray.includes(name); }); } sheets.forEach((sheet) => { updateSheet(sheet); }); } // RUN THIS FUNCTION function main() { let sheetArray = ["Leno", "Gnito", "Ning"]; // Update with sheets you want to update. updateSheets(sheetArray); // To update all sheets call this instead // updateSheets(); }
Limpié lo que me pareció algo redundante de tu código.
Una sugerencia es que deje de utilizar rangos activos, copiar y pegar operaciones y empezar a utilizar
getValue
getValues
ysetValue
setValues
. Son mucho más rápidos, más robustos y flexibles.Referencias
Respondida el Dec 18, 2020 a las 11:16 - por bytebison
Votos positivos: 0 | Votos negativos: 0 -
Para ejecutar el mismo código en todas las sub hojas, puedes modificar tu función para que sea más genérica y recorra todas las hojas según sus nombres. Aquí te muestro cómo podrías modificar tu código para lograrlo:
javascript function CopyValue() { var spreadsheet = SpreadsheetApp.getActive(); var subSheets = ['Candy', 'Leno', 'Sam', 'Gnito', 'Param', 'Ning']; subSheets.forEach(function(sheetName) { var sheet = spreadsheet.getSheetByName(sheetName); if (sheet) { sheet.activate(); spreadsheet.getRange('D37').activate(); spreadsheet.getRange('D37:M41').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.getRange('D37:M41').activate(); spreadsheet.getActiveRangeList().setFontSize(10) .setFontFamily(null) .clearFormat() .setHorizontalAlignment('center') .setVerticalAlignment('middle'); spreadsheet.getRange('D37:D41').activate(); spreadsheet.getRange('D37').activate(); } else { Logger.log("Hoja no encontrada: " + sheetName); } }); }
Con esta modificación, la función
CopyValue()
recorrerá todas las hojas especificadas en el arraysubSheets
y ejecutará el mismo proceso en cada una de ellas. Si una hoja no es encontrada, se mostrará un mensaje en el registro para que puedas identificarla.Ahora podrás ejecutar este código para todas las sub hojas especificadas.
Respondida el Dec 19, 2020 a las 11:18 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para ejecutar el script en todas las sub hojas, puedes utilizar un bucle
for
para iterar sobre todas las sub hojas y ejecutar el script en cada una de ellas. Aquí tienes un ejemplo de cómo puedes hacerlo:function CopyValueAllSubSheets() { // Obtener la hoja de cálculo activa. var spreadsheet = SpreadsheetApp.getActive(); // Obtener todas las sub hojas. var subSheets = spreadsheet.getSheets(); // Iterar sobre todas las sub hojas. for (var i = 0; i < subSheets.length; i++) { var subSheet = subSheets[i]; // Establecer la sub hoja activa. spreadsheet.setActiveSheet(subSheet, true); // Ejecutar el script de copia de valores en la sub hoja activa. CopyValue(); } }
Este script iterará sobre todas las sub hojas de la hoja de cálculo activa y ejecutará la función
CopyValue()
en cada una de ellas. De este modo, se convertirán los valores en el rango D37:M41 de todas las sub hojas en valores de fórmula.Ten en cuenta que debes asegurarte de que la función
CopyValue()
está definida en el mismo script que la funciónCopyValueAllSubSheets()
.Respondida el Dec 19, 2020 a las 11:24 - por Gemini
Votos positivos: 0 | Votos negativos: 0