根据 TEXT 消息框从多个 sheet 中删除行
Delete row from more than one sheet based on TEXT message box
希望根据输入框更改此脚本以处理超过 1 个 sheet(sheet1、sheet2、sheet3)。我能够将名称添加到 sheets,方法是在脚本中分别调用每个名称,然后根据文本执行添加,但我不知道如何删除。这是我在此处从 Mogsdad 找到的脚本,我希望它能发挥作用。
function Deletename() {
var value_to_check =
Browser.inputBox(
"Enter First and Last Name to Delete",
"",
Browser.Buttons.OK_CANCEL);
var FIRST_COLUMN = 1
var ss = SpreadsheetApp.getActiveSpreadsheet();
var DATA_SHEET =
SpreadsheetApp.getActiveSpreadsheet()
.getActiveSheet();
ss.toast("removing duplicates...", "", -1);
var dataCopy1 = DATA_SHEET.getDataRange().getValues();
var deleted_rows = 0;
if (dataCopy1.length > 0) {
var i = DATA_SHEET.getLastRow(); // start at bottom
while (i > 0) {
if (dataCopy1[i - 1][FIRST_COLUMN - 1] === value_to_check) {
ss.deleteRow(i);
deleted_rows++;
}
i--;
}
}
ss.toast("Done! " + deleted_rows + ' rows removed', "", 5);
}
不是检索活动 sheet,而是遍历所有 sheet
- 目前,您定义
var DATA_SHEET = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- 这将仅将您的请求应用于活动 sheet
- 相反,您可以使用 ss.getSheets() 检索价差 sheet 的所有 sheet,并在循环内部将每个可用的 sheet 定义为
DATA_SHEET
依次
- 运行 循环中的其余代码和以前一样,只是要小心删除行:
- 如果您有多个 sheet,请将
ss.deleteRow(i);
更改为 DATA_SHEET.deleteRow(i);
以删除 sheet 中您当前循环的行,而不是活动行一个
样本:
function Deletename() {
var value_to_check =
Browser.inputBox(
"Enter First and Last Name to Delete",
"",
Browser.Buttons.OK_CANCEL);
var FIRST_COLUMN = 1
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (var a = 0; a < sheets.length; a++){
var DATA_SHEET = sheets[a];
ss.toast("removing duplicates...", "", -1);
var dataCopy1 = DATA_SHEET.getDataRange().getValues();
var deleted_rows = 0;
if (dataCopy1.length > 0) {
var i = DATA_SHEET.getLastRow(); // start at bottom
while (i > 0) {
if (dataCopy1[i - 1][FIRST_COLUMN - 1] == value_to_check) {
DATA_SHEET.deleteRow(i);
deleted_rows++;
}
i--;
}
}
}
ss.toast("Done! " + deleted_rows + ' rows removed', "", 5);
}
希望根据输入框更改此脚本以处理超过 1 个 sheet(sheet1、sheet2、sheet3)。我能够将名称添加到 sheets,方法是在脚本中分别调用每个名称,然后根据文本执行添加,但我不知道如何删除。这是我在此处从 Mogsdad 找到的脚本,我希望它能发挥作用。
function Deletename() {
var value_to_check =
Browser.inputBox(
"Enter First and Last Name to Delete",
"",
Browser.Buttons.OK_CANCEL);
var FIRST_COLUMN = 1
var ss = SpreadsheetApp.getActiveSpreadsheet();
var DATA_SHEET =
SpreadsheetApp.getActiveSpreadsheet()
.getActiveSheet();
ss.toast("removing duplicates...", "", -1);
var dataCopy1 = DATA_SHEET.getDataRange().getValues();
var deleted_rows = 0;
if (dataCopy1.length > 0) {
var i = DATA_SHEET.getLastRow(); // start at bottom
while (i > 0) {
if (dataCopy1[i - 1][FIRST_COLUMN - 1] === value_to_check) {
ss.deleteRow(i);
deleted_rows++;
}
i--;
}
}
ss.toast("Done! " + deleted_rows + ' rows removed', "", 5);
}
不是检索活动 sheet,而是遍历所有 sheet
- 目前,您定义
var DATA_SHEET = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- 这将仅将您的请求应用于活动 sheet
- 相反,您可以使用 ss.getSheets() 检索价差 sheet 的所有 sheet,并在循环内部将每个可用的 sheet 定义为
DATA_SHEET
依次 - 运行 循环中的其余代码和以前一样,只是要小心删除行:
- 如果您有多个 sheet,请将
ss.deleteRow(i);
更改为DATA_SHEET.deleteRow(i);
以删除 sheet 中您当前循环的行,而不是活动行一个
样本:
function Deletename() {
var value_to_check =
Browser.inputBox(
"Enter First and Last Name to Delete",
"",
Browser.Buttons.OK_CANCEL);
var FIRST_COLUMN = 1
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
for (var a = 0; a < sheets.length; a++){
var DATA_SHEET = sheets[a];
ss.toast("removing duplicates...", "", -1);
var dataCopy1 = DATA_SHEET.getDataRange().getValues();
var deleted_rows = 0;
if (dataCopy1.length > 0) {
var i = DATA_SHEET.getLastRow(); // start at bottom
while (i > 0) {
if (dataCopy1[i - 1][FIRST_COLUMN - 1] == value_to_check) {
DATA_SHEET.deleteRow(i);
deleted_rows++;
}
i--;
}
}
}
ss.toast("Done! " + deleted_rows + ' rows removed', "", 5);
}