如何将一系列单元格存储到数组中?

时间:2017-02-03 03:00:05

标签: google-apps-script google-sheets spreadsheet

如果我在单元格A1:A150中有数据列表(但数量可以变化),有没有办法将其推入数组而不单独查看每个单元格以确定它是否为空?我通过这样做超过了我的执行时间,我需要一种更快的方式来存储数据,并在它到达空单元格时停止。

以下是我目前的工作方式:

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

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

4 个答案:

答案 0 :(得分:7)

如果您只使用一列,我建议:

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

方法 .join() .split(',')一起将2D数组转换为普通数组([“A2”,“A3”, “A4”, “A5” ,,, “A8”, “A9”,])。 然后方法 .filter(Boolean)剥离空元素。上面的代码返回[A2,A3,A4,A5,A8,A9]。

答案 1 :(得分:5)

试试这个:

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

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

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

变量数据存储A列的所有单元格。

单元格A1存储在数据[0] [0]中,单元格A2存储在数据[0] [1]中,单元格A3存储在数据[0] [2]中,依此类推。

getRange(起始行,起始列,行数,列数)是批处理操作,因此当您拥有大型数据集时,它会快得多。

答案 2 :(得分:1)

试试这个:

它允许您选择工作表上的任何列。

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
*
*/
}

答案 3 :(得分:1)

如果你之间没有空单元格,那实际上很容易。

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

如果你需要在那之后清除空条目,你可以使用for语句,或者更快,像早期的答案一样过滤。

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

这个答案与我前面提到的那个答案之间的主要区别是getValues()会给你一个数组。

我已经测试了这个并且它适用于谷歌应用程序脚本,并且它在我使用数组时没有超时,或者甚至当我输入大量数据时(我使用大约20-的数组测试它)每个条目50个字符,约500个条目)。只需确保定义var表或放入自己的变量。