2017-02-03 3 views
0

Wenn ich eine Liste der Daten in den Zellen A1: A150 habe (aber die Menge kann variieren), gibt es eine Möglichkeit, das in ein Array zu schieben, ohne jede Zelle einzeln zu betrachten, um festzustellen, ob es ist leer? Ich überschreite meine Ausführungszeit, indem ich dies tue und ich brauche einen schnelleren Weg, um die Daten zu speichern, wenn es eine leere Zelle trifft.Speicherbereich von Zellen zu Array

Unten ist, wie ich es derzeit mache. Ich bin neu in diesem Bereich.

for (var i = 1; i < 500; i++) { 
    if(datasheet.getRange("A" + i).getValue() == ""){ 
    break; 
    } 

    else{ 
    addedlist_old.push(datasheet.getRange("A" + i).getValue()) 
    } 

Antwort

2

Wenn Sie nur eine Spalte, würde ich vorschlagen:

// my2DArrayFromRng = sh.getRange("A2:A10").getValues(); 
    var my2DArrayFromRng = [["A2"],["A3"],["A4"],["A5"],[],[],["A8"],["A9"],[]]; 
    var a = my2DArrayFromRng.join().split(',').filter(Boolean); 

Die Methoden .join() und .split ('') zusammen, um das 2D-Array zu einem konvertieren Einfaches Array (["A2", "A3", "A4", "A5" ,,, "A8", "A9",]). Dann die Methode . Filter (Boolean) Streifen die leeren Elemente. Der obige Code gibt [A2, A3, A4, A5, A8, A9] zurück.

1

Dieses versuchen:

var sheet = SpreadsheetApp.openById(SHEET_ID).getSheetByName(SHEET_NAME); 
    var lastRow = sheet.getLastRow(); 

    var data = sheet.getRange(1, 1, lastRow, 1); //getRange(starting Row, starting column, number of rows, number of columns) 

    for(var i=0;i<(lastRow-1);i++) 
    { 
     Logger.log(data[0][i]); 
    } 

die Variable Daten speichert alle Zellen der Spalte A.

Zelle A1 in Daten gespeichert sind [0] [0] ist, ist die Zelle A2 gespeichert in Daten [0] [1], Zelle A3 wird in Daten [0] [2] gespeichert und so weiter.

Die getRange (Startzeile, Startspalte, Anzahl der Zeilen, Anzahl der Spalten) ist eine Batch-Operation, so dass es viel schneller ist, wenn Sie einen großen Datensatz haben.

+0

Was passiert, wenn ich Daten in anderen Zellen habe? Würde nicht dauern, Ray-Ban RB4125 Aviator Sonnenbrille Grau Lens Schwarz Frame Ich sehe nichts, was explizit auf Spalte a verweist. – Aaron

+0

In Ihrer Frage haben Sie explizit A1: A150 (das ist nur Spalte A) erwähnt. Außerdem funktioniert der Code, den Sie zuerst ausprobiert haben, nur für die Spalte A. –

+0

in der for-Schleife in dem Code, den ich mit Ihnen geteilt habe ... Sie können die if-Bedingung hinzufügen, die Sie zuvor in Ihrem Code verwendet haben, und dann die Taste drücken Werte, die Sie für eine Variable benötigen. –

0

Try this:

Es ermöglichen Ihnen, jede Spalte auf dem Blatt zu wählen.

var ui = SpreadsheetApp.getUi(); 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 

function onOpen() { 

    ui.createMenu('Sheet Functions') 
.addItem('Get values from column', 'getVals') 
.addToUi();  
} 

function getVals() { 
var sheet = ss.getActiveSheet(); 
var getColumnLetter = ui.prompt('Select column..' , 'Enter the letter of the target column..', ui.ButtonSet.OK_CANCEL); 
    if(getColumnLetter.getSelectedButton() == ui.Button.CANCEL) { 
    return } else { 
    getColumnLetter = getColumnLetter.getResponseText().toUpperCase(); 
    } 

var columnNo = getColumnLetter.charCodeAt(0) - 64; 

try { var data = sheet.getRange(1, columnNo, sheet.getMaxRows()).getValues().filter(String); } catch (e) { ui.alert('Invalid input please try again.', ui.ButtonSet.OK); return;} 

/* 
* 
* Do what ever you need to do down here 
* 
*/ 
} 
1

Wenn Sie keine leeren Zellen dazwischen haben, ist es eigentlich ziemlich einfach.

var lastRow = sheet.getLastRow(); 
var array = sheet.getRange('A1:A' + lastRow).getValues(); 

Wenn Sie leere Einträge danach aussortieren müssen, können Sie ein for-Anweisung verwenden, oder schneller zu sein, Filter wie eine frühere Antwort zeigt.

var filteredArray = array.filter(function(n){ return n != '' }); 

Der Hauptunterschied zwischen dieser Antwort und den einem früher geschrieben, dass ich erwähnte, dass getValues ​​() ein Array geben.

Ich habe dies getestet und es funktioniert in Google Apps-Skript, und es nicht Timeout, wenn ich das Array verwenden, oder auch wenn ich große Datenmengen (ich habe es mit einem Array, das etwa 20 hat -50 Zeichen pro Eintrag und ca. 500 Einträge). Stellen Sie sicher, dass Sie das Var-Sheet definieren oder eine eigene Variable einfügen.

Verwandte Themen