2010-12-09 62 views
1

我被告知我应该巩固我的if语句。我不知道如何做到这一点?另外,这个脚本还有什么不对吗?这是一个谷歌文档脚本。Javascript巩固if语句

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")); 
    } 
} 
​ 

回答

2

再说什么默里指出,有些情况下你重复几个实例相同的表达:

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

可以是:

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

这适用于在较小程度上,以:

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

其可以是(例如):

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

1局部变量访问比外部对象属性的引用更快。您也可以将“for(var row = 0; row 2011-12-29 02:24:51

1

我唯一可以看到:

// 3是列C 如果(range.getColumn()== 3){ 如果(range.getValue()= “”!){

// 3是C列 如果(range.getColumn()== 3 & & range.getValue()!= “”){