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

308
Views
¿Cómo puedo usar matrices para hacer este código más rápido?

Cuando hago clic en " Agregar elemento ", quiero que el código se ejecute y muestre la información en la tabla debajo del formulario.

 function AddItem() { //DEFINE ALL ACTIVE SHEETS` var ss = SpreadsheetApp.getActiveSpreadsheet(); //DEFINE MENU SHEET ` var poSheet = ss.getSheetByName("POF"); var itemSheet = ss.getSheetByName("Products"); `//GET NEXT ROW OF PO SHEET` var lastrowPO = poSheet.getLastRow() + 1; `//GET LAST ROW OF ITEM SHEET` var lastrowItem = itemSheet.getLastRow(); `// GET VALUE OF PART AND QUANTITY` var part = poSheet.getRange('B15').getValue(); var quantity = poSheet.getRange('B17').getValue(); ` // GET UNIT PRICE FROM ITEM SHEET` for (var i = 2; i <= lastrowItem; i++) { if (part == itemSheet.getRange(i, 3).getValue()) { var part = itemSheet.getRange(i, 3).getValue(); var unitCost = itemSheet.getRange(i, 5).getValue(); var prodcode = itemSheet.getRange(i, 2).getValue(); } else if (part == itemSheet.getRange(i, 2).getValue()) { var part = itemSheet.getRange(i, 3).getValue(); var unitCost = itemSheet.getRange(i, 5).getValue(); var prodcode = itemSheet.getRange(i, 2).getValue(); } }; // POPULATE PO SHEET poSheet.getRange(lastrowPO, 1).setValue(prodcode); poSheet.getRange(lastrowPO, 2).setValue(part); poSheet.getRange(lastrowPO, 3).setValue(quantity); poSheet.getRange(lastrowPO, 4).setValue(unitCost).setNumberFormat("#,###.00"); };
  1. Uso este código para hacer coincidir el texto de la hoja 1 y tomar una fila de datos de la hoja 2 que coincida con ese texto y devolver los datos a la hoja 1.
  2. Lleva mucho tiempo correr.
  3. Quiero que funcione más rápido. ¿Puede alguien por favor guiarme?
  4. Soy un codificador aficionado.
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Descripción

No puedo probar esto, pero básicamente lo que hice fue cambiar su getValue/setValue a getValues/setValues. Por lo general, esto mejora drásticamente el rendimiento.

Algunas partes de su lógica no las entendí del todo, pero traté de duplicarlas tal como están. Por ejemplo, cambia prodcode a part en el bloque else. Y en lugar de continuar con el bucle una vez que he encontrado una coincidencia, break del bucle.

Usando la matriz de items , la fila 1 de la hoja de cálculo es el primer índice 0 de la matriz. Asimismo, la columna 1 de la hoja de cálculo es el segundo índice 0 de la matriz.

Código.gs

 function AddItem() { //DEFINE ALL ACTIVE SHEETS` var ss = SpreadsheetApp.getActiveSpreadsheet(); //DEFINE MENU SHEET ` var poSheet = ss.getSheetByName("POF"); var itemSheet = ss.getSheetByName("Products"); //GET NEXT ROW OF PO SHEET` var lastrowPO = poSheet.getLastRow() + 1; //GET LAST ROW OF ITEM SHEET` var lastrowItem = itemSheet.getLastRow(); // GET VALUE OF PART AND QUANTITY` var part = poSheet.getRange('B15').getValue(); var quantity = poSheet.getRange('B17').getValue(); // Use getValues to get all data var items = itemSheet.getDataRange().getValues(); // GET UNIT PRICE FROM ITEM SHEET // Here I'm assuming you want from row 2 to the last row // And I'm assuming you want the first occurance of part for( var i = 1; i < items.length; i++ ) { if( part == items[i][2] ) { var unitCost = items[i][4]; var prodcode = items[i][1]; break; } else if( part == items[i][1] ) { var prodcode = part; part = items[i][2]; var unitCost = items[i][4]; break; } }; // POPULATE PO SHEET // To use setValues it must pass a 2D array of 1 row poSheet.getRange(lastrowPO,1,1,4).setValues([[prodcode,part,quantity,unitCost]]); poSheet.getRange(lastrowPO, 4).setNumberFormat("#,###.00"); };

Referencia

  • Mejores prácticas
  • Rango.getValues()
  • Rango.establecerValores()
about 4 years ago · Juan Pablo Isaza 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!