Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Google应用程序脚本复制数据_Javascript_Google Apps Script - Fatal编程技术网

Javascript 使用Google应用程序脚本复制数据

Javascript 使用Google应用程序脚本复制数据,javascript,google-apps-script,Javascript,Google Apps Script,我试图在Google Apps脚本中编写一个脚本,从一个工作表中获取单元格信息,并将其复制到另一个工作表中,既可以获取某些列以显示在第二个工作表中,也可以根据某个列中单元格内的值设置条件。以下是我到目前为止的情况: function onMyEdit() { var myMaster = SpreadsheetApp.openById("xxxxx"); var masterSheet = myMaster.setActiveSheet(myMaster.getSheets()[0

我试图在Google Apps脚本中编写一个脚本,从一个工作表中获取单元格信息,并将其复制到另一个工作表中,既可以获取某些列以显示在第二个工作表中,也可以根据某个列中单元格内的值设置条件。以下是我到目前为止的情况:

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]);
  }
}
函数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=[]; 对于(变量i=1;i 因此,到目前为止,它只在一行上工作,从第二行开始(以允许列标题)。我假设,当我想根据单元格数据有条件地获取行时,我将在“for”循环中使用一个“if”语句作为条件,但我希望数据复制到两个表中的下一个可用行。我想我会使用类似于: “getLastRow+1”
或者类似的。由于数据量及其用途,我需要这段代码尽可能高效。我对编程相当陌生,所以请详细解释,再次感谢。

我不确定我是否完全理解了您想要做的事情,但根据我的理解,这段代码片段应该为您提供了一个更好的开始方式

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

函数onMyEdit(){ var myMaster=SpreadsheetApp.openById(“母版ID”); var masterSheet=myMaster.getSheets()[0];//获取第一张工作表 var myNames=SpreadsheetApp.openById(“名称表ID”); var namesSheet=myNames.getSheets()[0];//获取第一张工作表 var firstArray=masterSheet.getDataRange().getValues(); var dataList=[]; 对于(r=1;r0){ namesheet.getRange(1,namesheet.getLastColumn()+1,dataList.length,1).setValues(dataList);//在最后一列之后复制列中的数据 } }
您是否检查了代码审阅?您谈论行并将变量称为“行”,但您的代码正在抓取一列。。。哪一个是正确的?代码还是文本?使用getRange()时,它具有以下参数:行索引、列索引、行高、列宽。根据你的价值观,它肯定是一列。。。你为什么叫它罗?它使事情变得模棱两可,令人困惑,你不这样认为吗?:-)@谢谢你注意到这一点,这是一个开始。我需要考虑是坚持使用列功能还是切换到行。但由于我使用了“getValues”,根据谷歌的说法,它创建了一个2D数组,因此我需要弄清楚如何准确地构建这些数组,以及如何将它们打印到目标页面。我还是有点迷茫。。。
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
}
}