2017-05-22 4 views
0

Ich arbeite mit etwas Code, der einen vordefinierten Bereich nimmt und Daten auf ein Blatt mit dem gleichen Namen wie in Spalte A kopiert. Das Problem, in dem ich bin, ist, wenn Spalte A hat eine leere Zelle, die benötigt wird, dann bekomme ich einen Fehler, in dem es meldet, dass "Methode getRange" von null nicht aufgerufen werden kann. Wenn Daten in dieser Zelle sind, dann funktioniert es perfekt.Wenn Zelle leer ist, überspringen Sie und gehen Sie zum nächsten

Einige Dinge, die ich ausprobiert habe, sind die Filterung des Bereichs, der Code liest jedoch immer noch den Bereich, obwohl er ausgeblendet ist. Ich habe auch versucht, eine if/then-Anweisung zu schreiben, war aber nicht erfolgreich.

I have a sample Google Sheet ready to go here to illustrate the blank space.

Hier ist ein Screenshot der leeren Zelle ich mich beziehe:

Screenshot of the blank cell I am referring to.

-Code im Einsatz:

var ss=SpreadsheetApp.getActiveSpreadsheet(); 
var master = ss.getSheetByName('Home'); 
var colWidth = master.getLastColumn();// last used col in masterSheet 
var sheets = ss.getSheets();// number of sheets 
var editRange = 'B2:B15'; 


function onOpen() { 
    var menuEntries = [ {name: "Copy selected Rows to sheets", functionName: "copyRowsOnConditionV2"}, 
        ]; 
    ss.addMenu("Copy functions",menuEntries);// custom menu 
} 

function copyRowsOnConditionV2() { 
    var sheetNames = [];// array of existing sheet names 
    var sheets = ss.getSheets();// number of sheets 
    for(s=0;s<sheets.length;++s){sheetNames.push(sheets[s].getName())}; 

    var selectedfirstRow = ss.getRange(editRange).getRowIndex(); 
    var selectedHeigth = ss.getRange(editRange).getHeight() 
    var selectedFullRange = master.getRange(selectedfirstRow,1,selectedHeigth,1); 
    var data = selectedFullRange.getValues(); 
    for(n=0;n<data.length;++n){ 
    if(data[n][0].length<16){ 
    var dest = ss.getSheetByName(data[n][0].toString().replace(/ /g,''));//find the destination sheet 
    Logger.log(data[n][0].toString().replace(/ /g,'')) 
    var destRange = dest.getRange(dest.getLastRow()+1,1);// define range 
    master.getRange(selectedfirstRow+n,2,1,1).copyTo(destRange);// and make copy below last row 
    } 
    } 
} 

Ich denke, für einige, was ich suche ist Art von "Wenn Zelle leer ist, dann gehe zur nächsten Zelle" Art von Code.

Was ich dachte funktionieren würde:

If(data[n][0].length==""{ 
// Do nothing 

if(data[n][0].length<16){ 
// Do something 
} 
} 

Alle Ideen, wie ich so etwas wie dieses nicht erhalten zu arbeiten?

bearbeiten

fand ich, dass die ursprüngliche IF-Anweisung Ich war gerade oben gepostet nicht in der korrekten Syntax. Ich habe es seitdem korrigiert, bekomme aber immer noch den gleichen Fehler.

New If Else if-Anweisung:

if(data[n][0].length=0){ 
//do nothing 
} 
else if(data[n][0].length<1){ 
//do something 
} 

Antwort

1

Gerade

if (data[n][0]) { 

    // do something; 


    } 

Im ‚wenn‘ Operator verwendet, wird die Aussage zwischen den Klammern als ‚falsch‘ bewertet werden, wenn der Wert null, nicht definiert oder einem leeren String „“.

+0

Das hat den Trick für mich! Vielen Dank, dass Sie sich meinen Code angeschaut und eine Lösung bereitgestellt haben. – user1664305

+0

Es ist mir eine Freude. Seien Sie vorsichtig bei der Verwendung der 'if' Anweisung mit Zahlen - in JavaScript wird 0 bis 'false' ausgewertet, was ein wenig kontraintuitiv ist. Für Strings wird dies jedoch den Trick machen. –

1

Der JavaScript "nicht" wird von einem Operator Wert testet für null, undefined und eine leere Zeichenfolge, und das Rück true wenn es eine dieser Bedingungen findet. Der "nicht" -Operator ist ein Ausrufezeichen.

if(!data[n][0]){ 
    Logger.log('tested true for NOT') 
    continue;//execute the next loop 
} 
Verwandte Themen