Google 应用脚本 removes/deletes 任何空行
Google Apps Script that removes/deletes any empty rows
本质上,我正在寻找一个脚本,使我的单曲 Google Sheet(标题为 Main)没有任何空行。如果我有一行包含数据,一段时间后,该行中的所有数据都被清除,我希望脚本注意到并立即删除该行。任何 help/scripts 表示赞赏。
我正在通过外部应用程序管理 sheet 中的数据,结果是我能够(从应用程序中)“删除”一行。但它实际上所做的只是清除该行中的所有数据,它实际上并没有删除该行本身。所以我剩下的是一个 sheet ,它有分散的数据行。例如,过了一会儿,也许第 3 行、第 12 行、第 125 行和第 356 行中有数据,发生的情况是这些行(包含数据)之间的 space 是空行,而不是,使用脚本,它可以继续检查空行,并在它们变空时将其删除。
编辑 - 工作解决方案:
function deleteEmptyRows() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("Main");
var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
var row = sheet.getLastRow();
while (row > 2) {
var rec = data.pop();
if (rec.join('').length === 0) {
sheet.deleteRow(row);
}
row--;
}
var maxRows = sheet.getMaxRows();
var lastRow = sheet.getLastRow();
if (maxRows - lastRow != 0) {
sheet.deleteRows(lastRow + 1, maxRows - lastRow);
}
}
看看Trigger. You will find the onEdit()
触发器特别有用。
每次在关联的电子表格中进行编辑时,JavaScript 函数 onEdit()
将是 运行 并且它会得到一个 event object passed to it. You can use the event object to detect which kind of event happend e.g. a row was deleted. Filter the kind of event you want to react to and then do whatever you need to do using the APIs Google App Script provides. For a list of available changeTypes
(i.e. row deleted, column inserted etc.) of a event object and its properties for Google Sheets see the documentation.
每五分钟删除 Sheet Main 中的空行
function delMts() {
const ss = SpreadsheetApp.getActive();
ss.toast('', "Removing Empties", 5);
const sh = ss.getSheetByName("Main");
const vs = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn()).getValues().filter(r => r.every(c => c != ''));
sh.deleteRows(vs.length + 1,sh.getMaxRows() - vs.length);
sh.getRange(1,1,vs.length,vs[0].length).setValues(vs);
}
//run this once
function createTriggerfordleMts() {
if(ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == "delMts").length == 0) {
ScriptApp.newTrigger("delMts").timeBased().everyMinutes(5).create();
}
}
此脚本抓取 sheet,从下往上迭代(从最后一个包含行的数据开始)并检查空行,如果找到,则将其删除,然后检查剩余的空行超出最后一个包含行的数据的行,如果它们为空,则立即删除它们。此外,此脚本设置有相应的 onChange 触发器,以便脚本在编辑 sheet 时随时运行,捕获任何新清除的行。
function deleteEmptyRows() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("Main");
var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
var row = sheet.getLastRow();
while (row > 2) {
var rec = data.pop();
if (rec.join('').length === 0) {
sheet.deleteRow(row);
}
row--;
}
var maxRows = sheet.getMaxRows();
var lastRow = sheet.getLastRow();
if (maxRows - lastRow != 0) {
sheet.deleteRows(lastRow + 1, maxRows - lastRow);
}
}
本质上,我正在寻找一个脚本,使我的单曲 Google Sheet(标题为 Main)没有任何空行。如果我有一行包含数据,一段时间后,该行中的所有数据都被清除,我希望脚本注意到并立即删除该行。任何 help/scripts 表示赞赏。
我正在通过外部应用程序管理 sheet 中的数据,结果是我能够(从应用程序中)“删除”一行。但它实际上所做的只是清除该行中的所有数据,它实际上并没有删除该行本身。所以我剩下的是一个 sheet ,它有分散的数据行。例如,过了一会儿,也许第 3 行、第 12 行、第 125 行和第 356 行中有数据,发生的情况是这些行(包含数据)之间的 space 是空行,而不是,使用脚本,它可以继续检查空行,并在它们变空时将其删除。
编辑 - 工作解决方案:
function deleteEmptyRows() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("Main");
var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
var row = sheet.getLastRow();
while (row > 2) {
var rec = data.pop();
if (rec.join('').length === 0) {
sheet.deleteRow(row);
}
row--;
}
var maxRows = sheet.getMaxRows();
var lastRow = sheet.getLastRow();
if (maxRows - lastRow != 0) {
sheet.deleteRows(lastRow + 1, maxRows - lastRow);
}
}
看看Trigger. You will find the onEdit()
触发器特别有用。
每次在关联的电子表格中进行编辑时,JavaScript 函数 onEdit()
将是 运行 并且它会得到一个 event object passed to it. You can use the event object to detect which kind of event happend e.g. a row was deleted. Filter the kind of event you want to react to and then do whatever you need to do using the APIs Google App Script provides. For a list of available changeTypes
(i.e. row deleted, column inserted etc.) of a event object and its properties for Google Sheets see the documentation.
每五分钟删除 Sheet Main 中的空行
function delMts() {
const ss = SpreadsheetApp.getActive();
ss.toast('', "Removing Empties", 5);
const sh = ss.getSheetByName("Main");
const vs = sh.getRange(1, 1, sh.getLastRow(), sh.getLastColumn()).getValues().filter(r => r.every(c => c != ''));
sh.deleteRows(vs.length + 1,sh.getMaxRows() - vs.length);
sh.getRange(1,1,vs.length,vs[0].length).setValues(vs);
}
//run this once
function createTriggerfordleMts() {
if(ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == "delMts").length == 0) {
ScriptApp.newTrigger("delMts").timeBased().everyMinutes(5).create();
}
}
此脚本抓取 sheet,从下往上迭代(从最后一个包含行的数据开始)并检查空行,如果找到,则将其删除,然后检查剩余的空行超出最后一个包含行的数据的行,如果它们为空,则立即删除它们。此外,此脚本设置有相应的 onChange 触发器,以便脚本在编辑 sheet 时随时运行,捕获任何新清除的行。
function deleteEmptyRows() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName("Main");
var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
var row = sheet.getLastRow();
while (row > 2) {
var rec = data.pop();
if (rec.join('').length === 0) {
sheet.deleteRow(row);
}
row--;
}
var maxRows = sheet.getMaxRows();
var lastRow = sheet.getLastRow();
if (maxRows - lastRow != 0) {
sheet.deleteRows(lastRow + 1, maxRows - lastRow);
}
}