我正在尝试修改此脚本,以将列中包含“名称”一词的整行复制到新工作表中。
得到“例外:范围内的行数必须至少为 1”,因此目前根本不起作用!有人可以帮忙吗?
谢谢
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('Admin')
.addItem('Copy name rows', 'copyNameRows')
.addToUi();
}
function copyNameRows() {
const sourceSheet = SpreadsheetApp.getActive().getSheetByName('Source');
const targetSheet = SpreadsheetApp.getActive().getSheetByName('Target');
const dataValues = sourceSheet.getDataRange().getValues();
targetSheet.getRange(2,1,targetSheet.getLastRow() - 1, 28).clear();
var currentTargetRow = 2;
for (var i = 0 ; i < dataValues.length; i++) {
if (dataValues[0][24].toString().toLowerCase() == 'name' ||
dataValues[0][25].toString().toLowerCase() == 'name' ||
dataValues[0][26].toString().toLowerCase() == 'name' ||
dataValues[0][27].toString().toLowerCase() == 'name') {
sourceSheet.getRange(i + 1, 1, 1, 28).copyTo(targetSheet.getRange(currentTargetRow, 1));
currentTargetRow++;
}
}
}
摆弄范围值,但没有乐趣...据我了解,它应该检查第 24、25 和 26 列中的“名称”一词,如果存在,则将该行的内容复制到新工作表中?
试试这个方法:
function copyNameRows() {
const ss = SpreadsheetApp.getActive();
const ssh = ss.getSheetByName('Sheet0');
const tsh = ss.getSheetByName('Sheet1');
const svs = ssh.getDataRange().getDisplayValues();
tsh.clearContents();
const n = 'name';
let o = svs.filter((r,i) => r.slice(24,28).some(e => e.toLowerCase() == n))
o.unshift(svs[0])
tsh.getRange(tsh.getLastRow() + 1,1,o.length,o[0].length).setValues(o)
}