[英]How Do You Generate List On "Sheet A" from Data on "Sheet B" in Google Sheets Using a Script
[英]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);
}
}
这里有一些截图可以帮助我理解我的意思:
任何帮助将不胜感激。 谢谢!
我相信你的目标如下。
在这种情况下,如何进行以下修改?
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
。
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.