当前位置: 首页 > 知识库问答 >
问题:

google sheets脚本有条件地将行移动到另一个电子表格

常哲彦
2023-03-14

我是新来的,我在试图弄清楚这一点时遇到了一些困难。我有一个从谷歌表单收集数据的电子表格。我试图找到一种方法来移动数据的基础上列答案不同的谷歌表。(不是同一文档中的一张纸,而是一起的不同文档)。似乎有一些关于移动到同一文档中不同选项卡的信息,但不是不同的文档。

我首先要说的是,我只尝试了一个IMPORTRANGE函数,但这只反映了数据,不允许您更新或更改单元格。

这是我到目前为止能够拼凑出来的,但我可能还差得很远。

我有一个每小时运行一次的触发器。

function myFunction() {
 var ss = SpreadsheetApp.openById('1U0I9SkbGkHgm-vRkwf2Ppc_yxlqrVlg2t8yKRy3sYuI');
 var sheetOrg = ss.getSheetByName("Form Responses 1");
 var value1ToWatch = "ANDERSON";
 var value2ToWatch = "BARNES";
 var sheetNameToMoveTheRowTo = "Sheet1"; //sheet has same name for each target openByID(" *url key* ")
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var ts1 =SpreadsheetApp.openById("1PxV1PQrMdu_2aSru4dpan8cUgHYdlYPUp5anyzjMAms");
     sheet1in = ts1.getSheetByName("Sheet1");
 var ts2 = SpreadsheetApp.openById("1BYyQZNiXc2QqsyqWs7uazjl5B6mfFYM1xj3u8gWyYOQ");
     sheet1in = ts2.getSheetByName("Sheet1");

 arr = [], 
values = sheetOrg.getDataRange().getValues(),
i = values.length;
while (--i) {
  if (value1ToWatch.indexOf(values[i][1]) > -1) {
    arr.unshift(values[i])
   sheetOrg.deleteRow(i + 1) 
   sheet1in.getRange(sheet1in.getLastRow()+1, 1, arr.length, 
     arr[0].length).setValues(arr); 
  };

 if (value2ToWatch.indexOf(values[i][1]) > -1) {
    arr.unshift(values[i])
   sheetOrg.deleteRow(i + 1) 
   sheet2in.getRange(sheet2in.getLastRow()+1, 1, arr.length, 
 arr[0].length).setValues(arr);
};
}
}
  • google forms将信息转储到的表格是“Form Responses 1”
  • B列是我想要从中获取值的单元格。(总共有9个不同的值,可以是“ANDERSON”、“BARNES”、“SMITH”等)
  • 对于SheetnameToVetheroWTO是“Sheet1”-这可能会让人困惑,我可能需要更改它,但例如
    • ts1=电子表格应用程序。openById(“1PxV1PQrMdu_2aSru4dpan8cUgHYdlYPUp5anyzjMAms”)我希望将信息移动到的工作表名称是“Sheet1”
    • ts2=电子表格应用程序。openById(“1BYYQZNIXC2QQSYQWS7UAZJL5B6MFYM1XJ3U8GWYYOQ”)图纸名称也是“图纸1”,但在不同的文档中

    我想如果我能够让“安德森”工作,那么我可以为每个可能的响应添加额外的变量,只需复制和粘贴额外的“IF”语句,只需更改value eToWatch和Target etSheet值。

    我尝试过调试和运行上面的脚本,但什么都没有发生。调试中未报告任何错误,但不会移动任何信息。

    知道我做错了什么吗?

    //更新我得到了这个工作。我已经更新了列出的代码,对我有用。

共有2个答案

冯嘉珍
2023-03-14

下面是一个将数据从一个电子表格移动到另一个电子表格的简单示例

function movingDataToSS(){
  var ss=SpreadsheetApp.getActive();
  var dss=SpreadsheetApp.openById('ssId');
  var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var dsh=dss.getSheetByName('Sheet1');
  var drg=dsh.getRange(1,1,rg.getHeight(),rg.getWidth()).setValues(vA);
}

如果您想通过仅从奇数行和偶数列获取输出来对输出设置一些条件。

function movingDataOddRowsAndEvenCols(){
  var ss=SpreadsheetApp.getActive();
  var dss=SpreadsheetApp.openById('ssId');
  var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var h=rg.getHeight();
  var w=rg.getWidth();
  var dsh=dss.getSheetByName('Sheet1');
  for(var i=0;i<h;i++){
    var out=[];
    if(i%2==0){
      for(var j=0;j<w;j++){
        if(j%2==1){
          out.push(vA[i][j]);
        }
      }
      dsh.appendRow(out);
    }
  }
}
史弘博
2023-03-14

我认为CopyTo()方法不会像你提到的那样工作,它在相同的电子表格上运行。我给你发了一个例子,在源代码表数据上循环代码,然后用它设置目标代码表值。

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var allrange = ss.getActiveRange();
  var range = sheet.getRange("A1:A10");
  var values = range.getValues();
  var allvals = [];
  for(var i = 0; i < values.length; i++) {
    allvals.push( values[i] ) ;
  }
  var dataLength = allvals.length;
  // alert data
  var ui = SpreadsheetApp.getUi();
  // ui.alert( JSON.stringify(allvals) )

  // copy to new Google SpreadSheet
  var newSheet = SpreadsheetApp.openById('1F79XkNPWm2cCWlB2JP3K4tAYRESKUgtHK4Pn2vbJEiI').getSheets()[0];
  var tmp = "A1:A" + dataLength ;
  var newRange = newSheet.getRange( tmp );
  newRange.setValues( allvals );
}
 类似资料:
  • B页中有图表,其中有源数据。我想以这样一种方式将图表导入到主电子表格B中,当图表在表格B中更改时,它也应该在主表格A中动态更改。 经过大量的研究,我能够找到以下内容: Importrange-只导入数据,而不是图表 复制图表本身并将其粘贴到主工作表A,但当图表在工作表B中动态变化时,它不会更改。 发布图表并将URL作为图像插入-如果主表A是google电子表格,则不起作用,但适用于google文档

  • 我什么都试过了,但还是做不到 我试图使用setValues()将数据从一个电子表格复制到另一个电子表格,因为link对我不起作用。我还需要保持触发器的编辑。 因此,我创建了一个名为AddConvocacao的函数,并且总是在有任何更改时运行脚本。 为什么我在编辑时使用不起作用? 非常感谢!=)

  • 有人知道如何在Googlesheets中将一行从一张工作表转换/复制到另一张工作表吗? 下面是我想做的:所以我有一个谷歌电子表格文件。它有两个选项卡/工作表。 现在,工作表1有一列名为:“总计” 我知道我必须使用appendRow()函数。但这需要硬编码的值。类似这样的东西:床单。appendRow({“a”,“b”}),但我试图追加的行是由用户输入的。 然后把整行都复制过来。到目前为止,我能够得

  • 对Google Sheets脚本编辑非常陌生,但我正在尝试在工作表之间移动行。我已经使用getLastRow成功地做到了这一点,但是现在我正在尝试基于特定列来做到这一点。这样做的原因是信息所在的工作表具有预设的数据验证字段和复选框,导致该行每次都要排1000。 我在寻找当前工作表下拉菜单上选择的选项时,它会根据某一列找到第一个可用行,并替换该行(除了预设字段外,该行基本上为空)。 目前我有以下几点

  • 我是新来的谷歌工作表脚本和卡住试图做以下事情。我有2列:C包含开始时间码,D包含结束时间码。第三列(F)包含从开始时间码和结束时间码产生的电影提示的长度。由于时间码来自脚本,因此包含结果的单元格不能导出为其他格式。因此,我试图创建第四列,将列F的结果打印为值。我设法写了一个小脚本,可以做到这一点。它看起来像这样: 问题是,当我编辑C或D中的任何时间码时,它不会自动执行。 所以我试了一下: 它没有给

  • 我一直在设计一个基于Swing的桌面RPG程序,以促进带有GUI控制元素的基于文本的角色扮演。 为了促进这一点,每个正在运行的客户端都会获得一个带有所有重要JFrames的主桌面(托管客户端上的“GM Desktop”和远程客户端上的“Player Desktop”)。此外,GM和Players都可以为角色打开“透视桌面”,为他们提供一个单独的JDesktopPane,其中包含提供该角色视角的“角