我有一个谷歌电子表格,我有一个似乎无法解决的最后一个问题。
我为此脚本添加了一个按钮,当我按下按钮时,它会触发AddClient函数。
如何让下面的脚本循环下来第3列中搜索yes值的所有行,当它找到它时,将它下面的行复制到工作表“client”然后停止?
function AddClient(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "SETUP" && r.getColumn() == 3 && r.getValue() == "yes") {
var row = r.getRow() + 1; // Add 1 to the active row
var targetSheet = ss.getSheetByName("client");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 2, 1, 4).copyTo(target, {contentsOnly:true}); //Only selecting column 2, then the following 4 columns
}
}
编辑* 示例文档: https://docs.google.com/spreadsheets/d/1DFbAp0IN8_UFv9u8kWiZBTxDogj4e7FnuAPzC0grDw0/edit?usp=sharing
任何帮助都非常感谢!
干杯, Reiel
答案 0 :(得分:0)
appendRow
方法,用于处理查找最后一行所涉及的簿记。这使我们可以将脚本简化为以下内容:
function AddClient() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var data = ss.getSheetByName("SETUP").getRange(25, 2, 1, 4).getValues()[0];
ss.getSheetByName("client").appendRow(data);
}
编辑: 要删除重复项,您可以执行以下操作:
function AddClient() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var data = ss.getSheetByName("SETUP").getRange(25, 2, 1, 4).getValues()[0];
var clients = ss.getSheetByName("client").getDataRange().getValues();
if (!clients.filter(function(row) {return data.join("|") === row.join("|");})) {
ss.getSheetByName("client").appendRow(data);
}
}
请注意,对于特定示例,存在一些问题,因为前导零被切断。表格有点奇怪,有时甚至在设置单元格时也会尝试强制格式为数字。格式化为文本...