Pregunta

Me dijeron que debo consolidar mis sentencias if. No estoy seguro de cómo hacer esto? Además, ¿hay algo más mal en este guión? Es un script google doc.

function onEdit(e) {
  var colorA = "yellow";
  var colorB = "#dddddd";
  var colorC = "#dddddd";

  var sheet = e.source.getActiveSheet();
  var range = e.source.getActiveRange();

  // 3 is column C
  if (range.getColumn() == 3) {
    if (range.getValue() != "") {
      sheet.insertRowAfter(range.getRow());
      var r = range.getRow() + 1;
      sheet.getRange("A" + r + ":H" + r).setBackgroundColor(colorC);
    }
  }

  if (e.source.getActiveRange().getColumn() == 3 ||
      e.source.getActiveRange().getColumn() == 8) {
    var rows = sheet.getMaxRows();
    //two ranges
    //column C
    var rangeC = sheet.getRange("C1:C"+rows);
    var valuesC = rangeC.getValues();
    //column H range
    var rangeH = sheet.getRange("H1:H"+rows);
    var colorH = rangeH.getBackgroundColors();
    var valuesH = rangeH.getValues();

    //iterate over each row in column C and H
    //then change color
        for (var row = 0; row < valuesC.length; row++) {
          //check for columnC and column H
          if (valuesC[row][0] != "" && valuesH[row][0] == "") {
            colorH[row][0] = colorA;
          } else if (valuesH[row][0] != "") {
            colorH[row][0] = colorB;
          }
        }
    sheet.getRange("H1:H" + rows).setBackgroundColors(colorH);
  }
}
​




Here is the other one




ss = SpreadsheetApp.getActiveSpreadsheet();


function onOpen() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuEntries = [ {name: "New PO", functionName: "NewPO"}];
   ss.addMenu("New PO", menuEntries);
 }


function NewPO() {
  SpreadsheetApp.getActiveSheet().insertRowsBefore(1,6);


  // Adjust this range accordingly, these are the cells that will be
  // copied.  Format is getRange(startRow, startCol, numRows, numCols)
  ss.getSheetByName("PO Form").getRange(1, 1, 6, 8)
      .copyTo(SpreadsheetApp.getActiveSheet().getRange(1, 1, 6, 8));
   }


function onEdit(e) {
  var ss = e.source.getActiveSheet();
  var r = e.source.getActiveRange();
  // 1 is A, 2 is B, ... 8 is H
  if (r.getColumn() == 8 && r.getValue() == "x") {
    r.setValue(Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd"));
  }
}
​
¿Fue útil?

Solución

Además de lo que Murray señaló, hay varios casos en que se repite la misma expresión:

if (e.source.getActiveRange().getColumn() == 3 ||
  e.source.getActiveRange().getColumn() == 8) {

podría ser:

var col = e.source.getActiveRange().getColumn();
if(col == 3 || col == 8) {

Esto se aplica en menor medida a:

if (valuesC[row][0] != "" && valuesH[row][0] == "") {
        colorH[row][0] = colorA;
      } else if (valuesH[row][0] != "") {
        colorH[row][0] = colorB;
      }

que podría ser (por ejemplo):

var hRow = colorH[row];
if (valuesC[row][0] != "" && valuesH[row][0] == "") {
        hRow[0] = colorA;
      } else if (valuesH[row][0] != "") {
        hRow[0] = colorB;
      }

Otros consejos

Lo único que puedo ver:

// 3 es la columna C si (range.getColumn () == 3) { si (range.getValue ()! = "") {

// 3 es la columna C si (range.getColumn () == 3 && range.getValue ()! = "") {

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top