我正在尝试创建一个脚本来搜索整个工作簿" A"和工作簿" B"对于重复值,然后从工作簿中的位置删除包含副本的行" A"。
然而,当运行脚本时,我收到错误" TypeError:无法在对象中找到清除功能"回到我身边,我真的无法弄明白为什么。
我会尝试更详细地解释我想要实现的目标。
电子表格1包含等待提供给客户的所有未结订单的详细信息,标签名称可以每日更改,但大多数标签的格式相同,除了2个永远不会更改名称的标签。
电子表格2包含已提供和开具发票的订单的deatails。
因此,一旦我输入了机票号码。在电子表格2中,我必须在电子表格2中搜索票号。并删除该行,因为它不再是一个未结订单。我想要一个为我执行此任务的脚本。
我正在处理的脚本如下。
function deleteRowInSpreadsheet1() {
var s1 =SpreadsheetApp.openById("1pxWr3jOYZbcwlFR7igpSWa9BKCa2tTeliE8FwFCRTcQ").getSheets();
for (var i=0; i<s1.length; i++) {
var values1 = s1[i].getDataRange().getValues();
var s2 = SpreadsheetApp.openById("18jLxZlge_UFkdTjlO6opuDk1VKeezhEPLe9B7n1OfQs").getSheets();
for (var i=0; i<s1.length; i++) {
var values2 = s2[i].getDataRange().getValues();
var resultArray = [];
for(var n in values2){
var keep = true
for(var p in values1){
if( values1[n][0] == values1[p][0] && values2[n][1] == values1[p][1]){
keep=false;
break;
}
}
if(keep){
resultArray.push(values2[n]);
}
}
s1.clear()
s1.getRange(1,1,resultArray.length,resultArray[0].length).setValues(resultArray);
}
}
}
答案 0 :(得分:0)
然而,在运行脚本时,我收到错误“TypeError:找不到对象中的函数清除”给我,我真的无法弄清楚原因。
代码行
var s1 =SpreadsheetApp.openById("1pxWr3jOYZbcwlFR7igpSWa9BKCa2tTeliE8FwFCRTcQ").getSheets();
将一组工作表对象分配给s1
,但clear
不是数组方法。
<小时/> 值得注意的是,问题上的代码还有其他编程错误,如:
i
作为两者的迭代器。var s2 = SpreadsheetApp.openById("18jLxZlge_UFkdTjlO6opuDk1VKeezhEPLe9B7n1OfQs").getSheets();
会使脚本效率低下我认为您尝试调整answer by Serge insas到Google Script: Delete row if a value in it exists in another sheet
的代码
function deleteRowInSheet1() {
var s1 = SpreadsheetApp.openById("1RxtFWZJRWxgW-zUM6S-dvZ0yFe-G2DGJFWI3gAt-1T0").getSheetByName('Sheet1');
var s2 = SpreadsheetApp.openById("1RxtFWZJRWxgW-zUM6S-dvZ0yFe-G2DGJFWI3gAt-1T0").getSheetByName('Sheet2');
var values1 = s1.getDataRange().getValues();
var values2 = s2.getDataRange().getValues();
var resultArray = [];
for (var n in values1) {
var keep = true
for (var p in values2) {
if (values1[n][0] == values2[p][0] && values1[n][1] == values2[p][1]) {
keep = false;
break;
}
}
if (keep) {
resultArray.push(values1[n])
};
}
s1.clear()
s1.getRange(1, 1, resultArray.length, resultArray[0].length).setValues(resultArray);
}
设计错误是删除getSheetByName,假设这将使该函数适用于两个电子表格中的每个工作表。相反,您必须为每个电子表格包含一个循环,以遍历每个电子表格的所有表格。像下面这样的东西可以工作(我没有测试过它)
function deleteRowInSpreadsheet1() {
var ss1 = SpreadsheetApp.openById(/*add here your spreadsheet 1 id*/);
var ss2 = SpreadsheetApp.openById(/*add here your spreadsheet 2 id*/);
//
for (var l in ss1) {
for(var m in ss2 {
var values1 = ss1[l].getDataRange().getValues();
var values2 = ss2[m].getDataRange().getValues();
var resultArray = [];
for (var n in values1) {
var keep = true;
for (var p in values2) {
if (values1[n][0] == values2[p][0] && values1[n][1] == values2[p][1]) {
keep = false;
break;
}
}
if (keep) {
resultArray.push(values1[n]);
};
}
s1.clear();
s1.getRange(1, 1, resultArray.length, resultArray[0].length).setValues(resultArray);
} // closes l loop
} // closes m loop
}