我撰寫了簡單的代碼回圈遍歷報告并根據第一列的結果洗掉未使用的行。簡單地說,如果它說“DEL”,它就會洗掉該行。
由于它不是批處理回圈,因此需要永遠運行。我知道我應該讓它成為一個批處理回圈以使其更快,但是在看了很多教程之后我仍然迷失了,主要是因為不知道如何將 IF 陳述句與陣列集成。
這是代碼:
function CompVM() {
var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
var sheet = SpreadsheetApp.getActive().getSheetByName('XML');
sheet.getRange(1,1);
for (var rooow = 3; rooow <= 1554; rooow ){
var checkCell = sheet.getRange(rooow,1).getValue();
if(checkCell == "DEL"){
sheet.deleteRow(rooow);
rooow = rooow - 1;
}
}
app.getUi().alert('Import File prepared, check for errors now');
};
誰能幫助如何從這段代碼中快速回圈?謝謝
uj5u.com熱心網友回復:
解決方案 #1 - 嘗試
function CompVM() {
var app = SpreadsheetApp;
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('XML');
var data = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
var rowToBeDeleted = [];
for (let rooow in data) {
if (data[rooow].join('') == 'DEL') {
rowToBeDeleted.push( rooow 1)
}
};
rowToBeDeleted.reverse().forEach(x => sheet.deleteRow(x));
app.getUi().alert('Import File prepared, check for errors now');
};
您需要一次獲取所有值以減少時間
還有其他解決方案:
- 按第 1 列排序,檢查 DEL 的開始和結束位置并一次洗掉所有行
- 或在必要時使用批處理更新(請參閱下一節)
解決方案 #2 - 啟用 google sheet api 服務
function deleteRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('XML');
var values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
var sheetId = sheet.getSheetId();
var requests = values.reduce((rowToBeDeleted, [value], i) => {
if (value == 'DEL') rowToBeDeleted.push({ deleteDimension: { range: { sheetId, startIndex: i, endIndex: i 1, dimension: "ROWS" } } });
return rowToBeDeleted;
}, []).reverse();
Sheets.Spreadsheets.batchUpdate({ requests }, ss.getId());
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/486523.html
上一篇:如何使用陣列來使這段代碼更快?
