我正在嘗試將資料行從作業表 1 傳輸到作業表 2。
每天我在 Sheet 1 中分配幾行我想轉移到 Sheet 2 中。在周末我將觸發腳本使用這個腳本轉移它們:
function archive() {
var lock = LockService.getScriptLock();
lock.waitLock(10000);
var ss = SpreadsheetApp.getActiveSpreadsheet();
/* Sheet 1 */
var firstSheet = ss.getSheetByName("Sheet 1");
var firstSheetValues = firstSheet.getRange(1, 2, firstSheet.getLastRow(), 1).getValues();
var moveRows = firstSheetValues.reduce(function(ar, e, i) {
if (e[0] == "Archive") ar.push(i 1);
return ar;
}, []);
/* Sheet 2 */
var secondSheet = ss.getSheetByName("Sheet 2");
moveRows.forEach(function(e) {
firstSheet.getRange(e, 1, 1, firstSheet.getLastColumn()).moveTo(secondSheet.getRange(secondSheet.getLastRow() 1, 1));
});
moveRows.reverse().forEach(function(e) {
firstSheet.deleteRow(e)
});
lock.releaseLock();
SpreadsheetApp.flush();
}
如果在 A 列中寫入“存檔”,它將移動行。
問題是,如果我做 10-20 行,它會一一執行,而且速度非常慢,有時會凍結。
有沒有更有效的方法在觸發器上傳輸行?我要他們一起去。被歸檔的行是隨機分配的,它們可以是第 2、3、4、7、10、15、22、23、26 行等。
然后在作業表 2 中,它們應該添加到最后一行,而不是覆寫任何內容
如果這一切都可以一次性完成而不是一一完成,那就太好了,因為當前腳本移動行然后一一洗掉它們
我還想提一下這個作業表是由幾個人共享的,他們都有自己的作業表,并且會將行轉移到同一個共享作業表,所以我想記住這一點
謝謝
uj5u.com熱心網友回復:
我相信你的目標如下。
- 你的腳本作業正常。但是,您希望降低腳本的流程成本。
在這種情況下,如何進行以下修改?
修改后的腳本:
在此修改中,行使用setValuesSheets API進行復制和洗掉。這樣一來,我認為工藝成本可能會降低一點。因此,請在使用此腳本之前在高級 Google 服務中啟用 Sheets API。
function archive() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var firstSheet = ss.getSheetByName("Sheet 1");
var firstSheetValues = firstSheet.getRange(1, 1, firstSheet.getLastRow(), firstSheet.getLastColumn()).getValues();
var sheetId = firstSheet.getSheetId();
var {values, requests} = firstSheetValues.reduce(function (o, r, i) {
if (r[1] == "Archive") {
o.values.push(r);
o.requests.push({ deleteDimension: { range: { sheetId, startIndex: i, endIndex: i 1, dimension: "ROWS" } } });
}
return o;
}, { values: [], requests: [] });
var secondSheet = ss.getSheetByName("Sheet 2");
secondSheet.getRange(secondSheet.getLastRow() 1, 1, values.length, values[0].length).setValues(values);
Sheets.Spreadsheets.batchUpdate({requests: requests.reverse()}, ss.getId());
}
參考:
- 方法:電子表格.batchUpdate
- 洗掉維度請求
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/355717.html
標籤:谷歌应用程序脚本 谷歌表格 google-sheets-api
上一篇:論壇IFS1*1=1
