本質上,我正在尋找一個腳本,使我的單個 Google 表格(標題為 Main)沒有任何空行。如果我有一行包含資料,一段時間后,該行中的所有資料都被清除,我希望腳本注意到并立即洗掉該行。任何幫助/腳本表示贊賞。
我正在從外部應用程式管理作業表中的資料,發生的事情是我能夠(從應用程式)“洗掉”一行。但它實際上所做的只是清除該行中的所有資料,它實際上并沒有洗掉該行本身。所以我剩下的是一張包含分散資料行的表格。例如,一段時間后,第 3 行、第 12 行、第 125 行和第 356 行中可能有資料,而這些行(包含資料)之間的空間是空行,而使用腳本,它可以繼續檢查空行,并在它們變為空時將其洗掉。
編輯 - 作業解決方案:
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);
}
}
uj5u.com熱心網友回復:
看看觸發器。您會發現onEdit()觸發器特別有用。
每次在關聯的電子表格中進行編輯時,JavaScript 函式onEdit()都會運行,并且會獲取一個傳遞給它的事件物件。您可以使用事件物件來檢測發生了哪種事件,例如洗掉了一行。過濾您想要回應的事件型別,然后使用 Google App Script 提供的 API 執行您需要執行的任何操作。changeTypes有關Google 表格的事件物件及其屬性的可用串列(即洗掉的行、插入的列等),請參閱檔案。
uj5u.com熱心網友回復:
每五分鐘洗掉一次作業表主中的空行
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();
}
}
uj5u.com熱心網友回復:
此腳本抓取作業表,從下向上迭代(從包含行的最后一個資料開始)并檢查空行,如果找到,則洗掉它們,然后檢查包含行的最后一個資料之外的剩余空行并洗掉如果它們是空的,它們會立即全部顯示出來。此外,此腳本設定有相應的 onChange 觸發器,以便在編輯作業表時運行腳本,捕獲任何新清除的行。
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);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/450833.html
