Google apps script 如果找不到匹配项,如何删除单元格?
我在编写IF语句以满足我的条件时遇到困难。我有两张表:主表和物流表。第一个是关于货物及其运输的具体信息,如拖车、位置和到达日期。第二张表包含所有运输信息,如拖车名称、驾驶员、到达、出发等。根据“物流”表上的预定拖车,用户可以指定他希望用于相关货物的可用拖车 然而,在由于取消而将拖车从“物流”中删除的情况下,我无法撤销之前在“主要”上所做的选择。我的想法是让这个脚本在两个页面上寻找目的地和拖车的匹配组合(主屏幕上的第8列和第13列,物流上的第1列和第2列)。如果“Main”上有一行,在“Logistics”上找不到具有相同目的地的匹配拖车,则脚本应将“Main”上的第13、14和16列设置为空 有人能帮我写一个IF语句来满足这个条件吗 我已经附上了我到目前为止的代码位。我认为只有当语句需要修改时。谢谢你的帮助Google apps script 如果找不到匹配项,如何删除单元格?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我在编写IF语句以满足我的条件时遇到困难。我有两张表:主表和物流表。第一个是关于货物及其运输的具体信息,如拖车、位置和到达日期。第二张表包含所有运输信息,如拖车名称、驾驶员、到达、出发等。根据“物流”表上的预定拖车,用户可以指定他希望用于相关货物的可用拖车 然而,在由于取消而将拖车从“物流”中删除的情况下,我无法撤销之前在“主要”上所做的选择。我的想法是让这个脚本在两个页面上寻找目的地和拖车的匹配组合(主屏幕上的第8列和第13列,物流上的第1列和第2列)。如果“Main”上有一行,在“Logis
function deleteSelection() {
// Main variables:
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetMain = ss.getSheetByName("Main");
var tabMain = sheetMain.getRange(2, 1, sheetMain.getLastRow(), 18);
var dataMain = tabMain.getValues();
// Logistics variables:
var sheet = ss.getSheetByName("Logistics");
var dataRange = sheet.getRange(2, 1, sheet.getLastRow(), 9);
var data = dataRange.getValues();
for(var i = 0; i < dataMain.length; i++){
for(var j = 0; j < data.length; j++){
// Compare data: if there is no match between 2 sheets, set "Trailer", "Position" and "Arrival date" to empty:
if(dataMain[i][7].toLowerCase() == data[j][0].toLowerCase() && dataMain[i][12] == data[j][1]){
} else{
dataMain[i][12] = "";
dataMain[i][13] = "";
dataMain[i][15] = "";
}
}
}
// Take the modified tab and put it on the spreadsheet
tabMain.setValues(dataMain);
}
函数deleteSelection(){
//主要变量:
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheetMain=ss.getSheetByName(“Main”);
var tabMain=sheetMain.getRange(2,1,sheetMain.getLastRow(),18);
var dataMain=tabMain.getValues();
//物流变量:
var表=ss.getSheetByName(“物流”);
var dataRange=sheet.getRange(2,1,sheet.getLastRow(),9);
var data=dataRange.getValues();
对于(var i=0;i
UPD:添加了一个示例。在“Logistics”中,您可以看到被划掉的行,删除该行后,脚本应删除“Main”中被划掉的行 您正在尝试确定Main上的事件和拖车值是否与Logistics上的值匹配 我对你采取了稍微不同的方法。我将主“事件”和“拖车”的值连接起来,并使用该值查找物流上的匹配项
- 如果找到匹配项,则脚本可以跳出该循环并继续下一个循环
- 如果未找到匹配项,则变量将递增(因为在后续比较中可能会找到匹配项)。但是,一旦对物流上的所有值进行了评估,如果不匹配的数量等于物流上的记录数量,则必须更新Main上的值
功能so5992862301(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheetMain=ss.getSheetByName(“Main”);
var tabMain=sheetMain.getRange(2,1,sheetMain.getLastRow()-1,18);
var dataMain=tabMain.getValues();
//Logger.log(“调试:最后一行=“+sheetMain.getLastRow()+”,dataMain的长度=“+dataMain.length+”tab main=“+tabMain.getA1Notation());
//物流变量:
var表=ss.getSheetByName(“物流”);
var dataRange=sheet.getRange(2,1,sheet.getLastRow()-1,9);
var data=dataRange.getValues();
//Logger.log(“调试:后勤最后一行=“+sheet.getLastRow()+”,数据长度=“+data.length+”dataRange=“+dataRange.getA1Notation());
//通过主回路启动回路
对于(var i=0;i
请您解释/演示如何在“Main”上分配拖车。在对您的脚本进行评论之前,有必要先了解您为什么“无法撤销以前在“Main”上所做的选择”。您的解决方案可能不使用此脚本,它可能与在Main上分配预告片的过程有关。@Tedinoz,我正在使用AppSheet(无代码应用程序平台)用于分配现有拖车。应用程序能够显示特定目的地的现有拖车列表,允许用户进行选择,然后记录在“主”上。但是,由于数据分布在两张图纸之间,AppSheet无法覆盖之前在“主”上所做的选择一旦信息从“物流”中删除。好的。很讽刺,不是吗。不管怎样,w有什么问题
function so5992862301() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetMain = ss.getSheetByName("Main");
var tabMain = sheetMain.getRange(2, 1, sheetMain.getLastRow()-1, 18);
var dataMain = tabMain.getValues();
// Logger.log("DEBUG: Last row = "+sheetMain.getLastRow()+", length of dataMain = "+dataMain.length+" tab main = "+tabMain.getA1Notation());
// Logistics variables:
var sheet = ss.getSheetByName("Logistics");
var dataRange = sheet.getRange(2, 1, sheet.getLastRow()-1, 9);
var data = dataRange.getValues();
// Logger.log("DEBUG: Logistics Last row = "+sheet.getLastRow()+", length of data = "+data.length+" dataRange = "+dataRange.getA1Notation());
// start loop through Main
for(var i = 0; i < dataMain.length; i++){
// count the matches
var mismatch=0
// start loop through Logistics
for(var j = 0; j < data.length; j++){
// match Logistics: Event (Column A) and Trailer (Column B)
// match Main: Event (Column A) and Trailer (Column C)
// Compare data: if there is no match between 2 sheets, set "Trailer", "Position" and "Arrival date" to empty:
var logEventTrailer = data[j][0]+data[j][1];
var mainEventTrailer = dataMain[i][0]+dataMain[i][2];
//Logger.log("DEBUG: i:"+i+", Main:"+mainEventTrailer+", j:"+j+" Log:"+logEventTrailer);
if (mainEventTrailer === logEventTrailer){
// match
// Logger.log("DEBUG: Match-"+"i:"+i+", Main:"+mainEventTrailer+", j:"+j+" Log:"+logEventTrailer);
// if this is a match, then break loop and goto to next i
break;
}
else{
// no match
mismatch = mismatch+1
//Logger.log("DEBUG: No match:"+match+"-i:"+i+", Main:"+mainEventTrailer+", j:"+j+" Log:"+logEventTrailer)
}
// how many mismatches
if (mismatch ==data.length){
// no match found
//Logger.log("DEBUG: no match found");
// update array values for this row
dataMain[i][2] = "";
dataMain[i][3] = "";
dataMain[i][4] = "";
}
}
}
// update the array values for Main
tabMain.setValues(dataMain);
}