我有一个Google Spreadsheet,其中包含主表上的论文名称(称为“ ABSTRACTS”)。列之一指示该论文是否已在实验室中讨论过(“ si”,“ no”)。当列中显示“ si”(是)时,脚本会将文件名称和信息复制到另一张名为“ Seminarios”(研讨会)的表中,如果列中“否”,它将信息复制到另一张表中称为“ DISCUTIR”(以讨论) )。该脚本可以正常工作(它将信息复制到适当的工作表中),但是存在一些问题。当我们讨论论文时,我将其状态从“否”更改为“是”,将其添加到SEMINARIO表中,但不会将其从“ DISCUTIR”表中删除。有没有一种方法可以使脚本刷新整个工作表? (如果我删除“ DISCUTIR”表的全部内容,它只会添加我想要的内容,但是我想找到一种自动实现的方式。)
在这里,我附上我正在使用的代码。我确定它确实很乱而且效率低下,因为我不知道自己在做什么,为此我深表歉意。我在MATLAB上有一定的编程经验,但从未使用过JavaScript,只是设法通过复制和粘贴代码使其工作。
function onEdit(e) {
var sheetFrom = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ABSTRACTS");
var sheetTo = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SEMINARIOS");
var sheetTo2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DESCARTADOS");
var sheetTo3 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("DISCUTIR");
var sheetTo4 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("CHEQUEAR");
var data = sheetFrom.getDataRange().getValues();
var target = new Array(); // this is a new array to collect data
for (n = 0; n < data.length; ++n) { // iterate in the array, row by row
if (data[n][8] == "si") { // if condition is true copy the whole row to target
target.push(data[n]); // copy the whole row
} //if
} //for
//Paste to another sheet from first cell onwards
sheetTo.getRange(2, 1, target.length, target[0].length).setValues(target);
var data = sheetFrom.getDataRange().getValues();
var target = new Array(); // this is a new array to collect data
for (n = 0; n < data.length; ++n) { // iterate in the array, row by row
if (data[n][8] == "descartado") { // if condition is true copy the whole row to target
target.push(data[n]); // copy the whole row
} //if
} //for
//Paste to another sheet from first cell onwards
sheetTo2.getRange(2, 1, target.length, target[0].length).setValues(target);
var data = sheetFrom.getDataRange().getValues();
var target = new Array(); // this is a new array to collect data
for (n = 0; n < data.length; ++n) { // iterate in the array, row by row
if (data[n][8] == "no") { // if condition is true copy the whole row to target
target.push(data[n]); // copy the whole row
} //if
} //for
//Paste to another sheet from first cell onwards
sheetTo3.getRange(2, 1, target.length, target[0].length).setValues(target);
var data = sheetFrom.getDataRange().getValues();
var target = new Array(); // this is a new array to collect data
for (n = 0; n < data.length; ++n) { // iterate in the array, row by row
if (data[n][8] == "chequear") { // if condition is true copy the whole row to target
target.push(data[n]); // copy the whole row
} //if
} //for
//Paste to another sheet from first cell onwards
sheetTo4.getRange(2, 1, target.length, target[0].length).setValues(target);
}
答案 0 :(得分:0)
我想您可以看到为什么行没有消失的原因,但这是因为您只覆盖新输入数据的最后一行中的数据,而对那之后的行不做任何操作。
文档显示,存在一个名为clear()
的函数,该函数将删除以前存在的任何函数:https://developers.google.com/apps-script/reference/spreadsheet/sheet#clear
调用sheetTo4.clear()
将清除所有内容和格式,而调用sheetTo4.clear({contentsOnly: true})
将仅清除内容。当然,您将不得不重写工作表的标题。