我是 Google Sheets Apps 腳本的新手,我已經嘗試了幾十個腳本來完成這項作業,但都沒有成功。我正在嘗試撰寫一個腳本,如果選中了“B”列中的相鄰復選框,則從“C”列復制主題資料,并將該主題資料粘貼到從“A”列第 5 行開始的下一個空單元格中。任何幫助將不勝感激!謝謝你。
樣本表: https ://docs.google.com/spreadsheets/d/1g9tn907Ve4rGFo7UI1NwYDBQqK5Y26TOSD_KnEfSWKw/edit?usp=sharing
這是我最近的嘗試:
function onEdit(){
var ss = SpreadsheetApp.getActive().getActiveSheet();
var selection = ss.getActiveCell().getA1Notation().split("");
var row = ss.getActiveCell().getRow();
//Gets the checkbox value
var checkBoxValue = ss.getActiveCell().getValue().toString();
if(selection[0] != "B") return;
switch(checkBoxValue){
case checkBoxValue = "true":
ss.getRange("C" row).copyTo(ss.getRange('A5:A').getValues().filter(String).length 5);
break;
}
}
選中復選框時,我已經能夠檢索資料,但我不知道如何將資料粘貼到“A”列中的下一個空單元格中。上面的腳本是最新的迭代,但特別是這個是我從其他板上借來的,看看我是否能適應它……沒有運氣。
uj5u.com熱心網友回復:
我相信你的目標如下。
When the checkbox of column "B" is checked, you want to copy the value of column "C" to the next row of the last row of column "A".
從您的顯示腳本中,您想使用
onEdit.
在這種情況下,如何進行以下修改?
修改后的腳本:
使用時onEdit,可以使用事件物件。在此修改中,使用了事件物件。
function onEdit(e) {
// Ref: https://stackoverflow.com/a/44563639
Object.prototype.get1stNonEmptyRowFromBottom = function (columnNumber, offsetRow = 1) {
const search = this.getRange(offsetRow, columnNumber, this.getMaxRows()).createTextFinder(".").useRegularExpression(true).findPrevious();
return search ? search.getRow() : offsetRow;
};
var sheetName = "Research";
var { range } = e;
var sheet = range.getSheet();
if (sheet.getSheetName() != sheetName || range.columnStart != 2 || !range.isChecked()) return;
range.offset(0, 1).copyTo(sheet.getRange(sheet.get1stNonEmptyRowFromBottom(1) 1, 1), { contentsOnly: true });
}
- 在這種情況下,請選中“B”列的復選框。這樣,腳本就運行了。當您直接運行此腳本時,會發生錯誤。請注意這一點。
筆記:
在上述修改中,從底部開始搜索第一個空行。如果您想從頂部搜索它,請使用以下修改后的腳本。
function onEdit(e) { // Ref: https://stackoverflow.com/a/44563639 Object.prototype.get1stEmptyRowFromTop = function (columnNumber, offsetRow = 1) { const range = this.getRange(offsetRow, columnNumber, 2); const values = range.getDisplayValues(); if (values[0][0] && values[1][0]) { return range.getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow() 1; } else if (values[0][0] && !values[1][0]) { return offsetRow 1; } return offsetRow; }; var sheetName = "Research"; var { range } = e; var sheet = range.getSheet(); if (sheet.getSheetName() != sheetName || range.columnStart != 2 || !range.isChecked()) return; range.offset(0, 1).copyTo(sheet.getRange(sheet.get1stEmptyRowFromTop(1), 1), { contentsOnly: true }); }如果要在復制值后取消選中,請添加
range.uncheck()到腳本的最后一行。
參考:
- 簡單觸發器
- 事件物件
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/526966.html
