0

我正在尝试在 Google Apps Script 中编写一个脚本,该脚本从一张表中获取单元格信息并将其复制到另一张表中,既用于抓取某些列以显示在第二张表上,也用于基于某个单元格内的值的条件柱子。这是我到目前为止所拥有的:

function onMyEdit() {
  var myMaster    = SpreadsheetApp.openById("xxxxx");
  var masterSheet = myMaster.setActiveSheet(myMaster.getSheets()[0]);
  var myNames     = SpreadsheetApp.openById("xxxxx");
  var namesSheet  = myNames.setActiveSheet(myNames.getSheets()[0]);
  var row1        = masterSheet.getRange(1, 1, masterSheet.getLastRow(), 1);
  var rowV        = row1.getValues();
  var firstArray  = masterSheet.getDataRange().getValues();
  var dataList    = [];
  for (var i = 1; i < rowV.length; i++) {
    dataList.push(firstArray[i][0]);
    dataList.push(firstArray[i][1]);
    dataList.push(firstArray[i][2]);
    dataList.push(firstArray[i][3]);

  }
  for (var j = 0; j < rowV.length - 1; j++) {
    namesSheet.getRange(2, j + 1, 1, 1).setValue(dataList[j]);
  }
}

因此,到目前为止,它仅适用于从第二行开始的一行(以允许列标题)。而且我想当我想根据单元格数据有条件地抓取行时,我将在“for”循环内对条件使用“if”语句,但我希望数据复制到两个工作表中的下一个可用行。我想我会使用类似的东西:' getLastRow + 1 '或类似的东西。由于数据量及其用途,我需要此代码尽可能高效。我对编程很陌生,所以请详细解释一下,再次感谢。

4

1 回答 1

0

我不确定我是否完全理解您想要做的事情,但是-据我所知-此代码片段应该为您提供更好的开始...

(我在代码本身中添加了一些注释来解释)

function onMyEdit() {
  var myMaster    = SpreadsheetApp.openById("MasterSheet ID");
  var masterSheet = myMaster.getSheets()[0]; // get 1rst sheet
  var myNames     = SpreadsheetApp.openById("NamesSheet ID");
  var namesSheet  = myNames.getSheets()[0]; // get 1rst sheet
  var firstArray  = masterSheet.getDataRange().getValues();
  var dataList    = [];
  for ( r = 1; r < firstArray.length; r++) { // iterate the first col of masterSheet
      if(firstArray[r][0]=='some condition'){ // if value in the first column == 'some condition get the second column cell in the new array (here you could change what you want to get)
        dataList.push([firstArray[r][1]])
  }
  }
  Logger.log(dataList)
  if(dataList.length>0){
namesSheet.getRange(1,namesSheet.getLastColumn()+1,dataList.length,1).setValues(dataList);//copy data in a column after last col
}
}
于 2013-02-01T13:27:15.547 回答