繁体   English   中英

Google 表格:如何连续、按顺序列出从另一张表格复制的数据行,并且不通过脚本覆盖当前数据?

[英]Google Sheets: How do I list rows of data copied from another sheet consecutively, in order, and without overwriting current data through scripting?

我对使用 Google 表格有点陌生,并且在为票务系统创建按钮时偶然发现了一个问题。 我一直无法将复制的数据从第二行向下填充另一张纸,而不会出现间隙或覆盖现有数据。

该脚本主要检查是否选中了某行的复选框,复制该行中的数据,将该数据移动到另一张表,然后将该行重置为其原始 state。 这意味着它不会完全删除行或格式,而只会复制内容。

这是我到目前为止一直在使用的代码:

function MigrateInProgress() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();  
    var s = ss.getSheetByName('Copy of New Tickets');
    var s2 = ss.getSheetByName('In Progress');
    var r = s.getRange('G:G');    
    var v = r.getValues();  
    var dataset = [];
for(var i=v.length-1;i>=0;i--) 
    if(v[0,i]=='true') { 
        var data = s.getRange(i+1,1,1,6).getValues(); 
        s2.getRange(i+1,s2.getLastColumn()-6,data.length,6).setValues(data); 
        var datasetrange = s.getRange(i+1,1,1,6);
        datasetrange.clear({contentsOnly: true});
        datasetrange.clear({formatOnly: false});
        s.getRange(i+1,7).setValue(false);    
  }
}

这里有一些截图可以帮助我理解我的意思:

截图 1

截图 2

截图 3

任何帮助将不胜感激。 谢谢!

我相信你的目标如下。

  • 当检查了“ G”的复选框时,您需要将源表“ A”的“ A”至“ F”的行复制到目标表。
  • 那时,您要清除“A”到“F”列并取消选中“G”列。 而且,您希望将值复制到目标工作表而不包括空行。

在这种情况下,如何进行以下修改?

修改后的脚本:

function MigrateInProgress() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Copy of New Tickets');
  var s2 = ss.getSheetByName('In Progress');

  var v = s.getRange('A2:G' + s.getLastRow()).getValues();
  var { values, clear, uncheck } = v.reduce((o, r, i) => {
    if (r[6] === true) {
      var row = i + 2;
      o.values.push(r.splice(0, 6));
      o.clear.push(`A${row}:F${row}`);
      o.uncheck.push(`G${row}`);
    }
    return o;
  }, { values: [], clear: [], uncheck: [] });
  console.log(values)
  if (values.length > 0) {
    s2.getRange(s2.getLastRow() + 1, 1, values.length, values[0].length).setValues(values);
    s.getRangeList(clear).clearContent();
    s.getRangeList(uncheck).uncheck();
  }
}
  • 在此修改中,首先从源表中检索所有值。 并创建用于复制到目标工作表的值,并创建用于清除单元格和取消选中复选框的范围列表。

  • 顺便说一句, getValues检索到的值是二维数组,在这种情况下,复选框返回布尔类型。 所以当你想使用v[0,i]=='true'时,你可以使用v[i][0] === true

关于一些不清楚的地方,我猜测如下。

  • 当值被复制到目标工作表时,我不明白您是否要将值放在哪里。 因此,在此修改中,值将附加到目标工作表。 当您不想 append 的值时,请修改s2.getRange(s2.getLastRow() + 1, 1, values.length, values[0].length).setValues(values); s2.getRange(2, 1, values.length, values[0].length).setValues(values); . 这样,值总是从第 2 行开始。

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM