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

Google表格-根据特定列将行移动到另一个表格

谢俊悟
2023-03-14

对Google Sheets脚本编辑非常陌生,但我正在尝试在工作表之间移动行。我已经使用getLastRow成功地做到了这一点,但是现在我正在尝试基于特定列来做到这一点。这样做的原因是信息所在的工作表具有预设的数据验证字段和复选框,导致该行每次都要排1000。

我在寻找当前工作表下拉菜单上选择的选项时,它会根据某一列找到第一个可用行,并替换该行(除了预设字段外,该行基本上为空)。

目前我有以下几点:

function onEdit(event) {
  // Move rows to different sheets based on action selected

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = SpreadsheetApp.getActiveRange();

  if(range.getColumn() == 5 && range.getValue() == "Active") {
    var row = range.getRow();
    var numColumns = sheet.getLastColumn();
    var targetSheet = spreadsheet.getSheetByName("Active");
    var target = targetSheet.getRange(targetSheet.getLastRowSpecial(8) + 1, 1);
    sheet.getRange(row, 1, 1, numColumns).moveTo(target);
    sheet.deleteRow(row);

我在谷歌搜索时发现了以下和其他示例,但似乎都不起作用:

function getLastRowSpecial(column){
  // Get the last row with data for the whole sheet.
  var numRows = targetSheet.getLastRow();

  // Get all data for the given column
  var data = targetSheet.getRange(1, column, numRows).getValues();

  // Iterate backwards and find first non empty cell
  for(var i = data.length - 1 ; i >= 0 ; i--){
    if (data[i][0] != null && data[i][0] != ""){
      return i + 1;
    }
  }
}

非常感谢您的帮助!

共有1个答案

廖夜洛
2023-03-14
function onEdit(e) {
  //Logger.log(JSON.stringify(e));
  //e.source.toast(e.range.columnStart, e.value)
  var sh=e.range.getSheet();
  if(e.range.columnStart==8 && e.value=="Active") {
    var tsh=e.source.getSheetByName("Active");
    var target=tsh.getRange(getColumnHeight(8,tsh,e.source) + 1, 1);
    sh.getRange(e.range.rowStart,1,1,sh.getLastColumn()).moveTo(target);
    sh.deleteRow(e.range.rowStart);
  }
}

function getColumnHeight(col,sh,ss){
  var ss=ss||SpreadsheetApp.getActive();
  var sh=sh||ss.getActiveSheet();
  var col=col||sh.getActiveCell().getColumn();
  var s=0;
  var h=0;
  if(sh.getLastRow()) {
    var v=sh.getRange(1,col,sh.getLastRow(),1).getValues().map(function(r){return r[0];});
    v.forEach(function(e,i){if(e==''){s++;}else{s=0;}h++;});
  }
  return (h-s);
}
 类似资料:
  • 我是新来的,我在试图弄清楚这一点时遇到了一些困难。我有一个从谷歌表单收集数据的电子表格。我试图找到一种方法来移动数据的基础上列答案不同的谷歌表。(不是同一文档中的一张纸,而是一起的不同文档)。似乎有一些关于移动到同一文档中不同选项卡的信息,但不是不同的文档。 我首先要说的是,我只尝试了一个IMPORTRANGE函数,但这只反映了数据,不允许您更新或更改单元格。 这是我到目前为止能够拼凑出来的,但我

  • 我想将table 1的内容复制到table 2中,但它不是直接复制,因为table 2包含的列比表1多。结构类似于这样: 表 1 { 列 2 列 4 列 6 } 表2{column1 column2 column3 column4 column5 column6} 我想做的是将table1到table2中的每一行相加,并为缺少的列设置默认值。任何帮助都将不胜感激。

  • 对所有人,谢谢你提前的时间。 我们已经有了工作代码,可以在Excel中用vb将数据从一个wrksht移动到另一个wrksht。 如有任何帮助,我们将不胜感激。 2/22/19 以下是我的回应。 在第二个工作簿上,在第一列上进行搜索时,工作表称为orderlog 谢谢

  • 我发现了几个类似的问题,但似乎没有一个能准确回答我的问题,而且我不太擅长SQL,所以这是我的问题: 我有有多行; 我想将这些行(特定的行-如name1、name2、name3)迁移到不同表中的一行中,其中列将匹配名称。 下面是表2: 我可能知道如何编写能够做到这一点的SQL,但只能逐行编写。迁移这些数据的好方法是什么?理想情况下,我也会在完成后删除表1中的行。

  • 问题内容: 我有一个这样的字符串列表: 使用Y中的值对X进行排序以获取以下输出的最短方法是什么? 具有相同“键”的元素的顺序无关紧要。我可以求助于for结构的使用,但我好奇是否有更短的方法。有什么建议么? 问题答案: 最短代码 例: 一般来说 解释: 两个。 创建一个新的,list基于zip使用排序sorted()。 使用列表推导从排序的,压缩的中提取每对的第一个元素list。

  • 问题内容: 我确信这个问题以前可能已经被问过,但我似乎找不到正确的答案。如果我有两个清单 我正在尝试使用_list1重新排列_list2中的元素,以便它们完全匹配顺序。什么是最干净的方法?所需的输出: 很抱歉,如果这是重复的,但到目前为止,我只能使用压缩的sorted()方法找到数字列表的答案。 如果_list2是列表列表怎么办? 所需输出: 还有一个假设:如果我想使用_list1作为键对其他任何