Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

586
Views
Eliminar columnas específicas en Google App Script FAST

a continuación se muestra el código para eliminar columnas completas, excepto las columnas "G" y "M", utilizando un bucle for, pero el proceso es demasiado lento, ¿hay alguna manera de hacerlo más rápido?

 var lastCol = newSheet.getLastColumn(); var keep = [7,13]; for (var col=lastCol; col > 0; col--) { if (keep.indexOf(col) == -1) { newSheet.deleteColumn(col); } }
about 4 years ago · Santiago Gelvez
2 answers
Answer question

0

He aquí cómo hacerlo con la API de SpreadsheetApp:

 function test() { const keep = [7, 13]; // columns G and M const newSheet = SpreadsheetApp.getActiveSheet(); deleteColumns_(newSheet, keep); } /** * Deletes all columns in sheet except the ones whose column numbers * are listed in columnsToKeep. * * The columnsToKeep array [1, 2, 7, 13] means that columns A, B, G and M * will remain while other columns are deleted. * * @param {Sheet} sheet The sheet where to delete columns. * @param {Number[]} columnsToKeep Array of column numbers to keep. */ function deleteColumns_(sheet, columnsToKeep) { // version 1.0, written by --Hyde, 13 June 2022 // - see https://stackoverflow.com/q/72600890/13045193 const columnsToDelete = []; for (let i = 1, maxColumns = sheet.getMaxColumns(); i <= maxColumns; i++) { if (!columnsToKeep.some(columnNumber => i === columnNumber)) { columnsToDelete.push(i); } } const tuples = getRunLengths_(columnsToDelete).reverse(); tuples.forEach(([columnStart, numColumns]) => sheet.deleteColumns(columnStart, numColumns)); } /** * Counts consecutive numbers in an array and returns a 2D array that * lists the first number of each run and the number of items in each run. * * The numbers array [1, 2, 3, 5, 8, 9, 11, 12, 13, 5, 4] will get * the result [[1, 3], [5, 1], [8, 2], [11, 3], [5, 1], [4, 1]]. * * For best results, sort the numbers array like this: * const runLengths = getRunLengths_(numbers.sort((a, b) => a - b)); * Note that duplicate values in numbers will give duplicates in result. * * @param {Number[]} numbers The numbers to group into runs. * @return {Number[][]} The numbers grouped into runs, or [] if the array is empty. */ function getRunLengths_(numbers) { // version 1.1, written by --Hyde, 31 May 2021 if (!numbers.length) { return []; } return numbers.reduce((accumulator, value, index) => { if (!index || value !== 1 + numbers[index - 1]) { accumulator.push([value]); } const lastIndex = accumulator.length - 1; accumulator[lastIndex][1] = (accumulator[lastIndex][1] || 0) + 1; return accumulator; }, []); }
about 4 years ago · Santiago Gelvez Report

0

Creo que su objetivo es el siguiente.

  • Desea reducir el costo del proceso de su script.
  • Desea eliminar todas las columnas excepto las columnas "G" y "M".

En este caso, ¿qué tal si usamos Sheets API? Cuando se usa Sheets API, su secuencia de comandos es la siguiente. Pensé que cuando se usa Sheets API, el costo del proceso podría reducirse un poco.

Guión modificado:

Antes de usar este script, habilite Sheets API en los servicios avanzados de Google .

 function myFunction() { var sheetName = "Sheet1"; // Please set the sheet name. var keep = [7, 13]; var ss = SpreadsheetApp.getActiveSpreadsheet(); var newSheet = ss.getSheetByName(sheetName); var lastCol = newSheet.getLastColumn(); // or newSheet.getMaxColumns() var sheetId = newSheet.getSheetId(); var requests = [...Array(lastCol)].reduce((ar, _, i) => { if (!keep.includes(i + 1)) { ar.push({ deleteDimension: { range: { sheetId, startIndex: i, endIndex: i + 1, dimension: "COLUMNS" } } }); } return ar; }, []).reverse(); if (requests.length == 0) return; Sheets.Spreadsheets.batchUpdate({ requests }, ss.getId()); }
  • Cuando se ejecuta este script, se eliminan todas las columnas excepto las columnas "G" y "M".
  • Desde su secuencia de comandos, var lastCol = newSheet.getLastColumn(); se usa En este caso, se utiliza el rango de datos. Si desea verificar todas las columnas, use var lastCol = newSheet.getMaxColumns(); en lugar de eso.

Referencias:

  • Método: hojas de cálculo.batchUpdate
  • DeleteDimensionRequest
about 4 years ago · Santiago Gelvez Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!