我有一張谷歌表格,里面有兩張紙。第一頁 - 從表單中收集資料。第二頁 - 從第一頁中提取特定資料。所選行中的相同特定單元格并在 Sheet2 中添加有關新行的資訊。
在第一頁,在每行的第一個單元格上,我有一個下拉選單,假設觸發該 Sendd 腳本 - 將該資料發送到第二張表。
我想出了如何激活每個下拉選單作為激活腳本的觸發器。但我需要為每個下拉選單分別撰寫一個單獨的腳本。
是否可以使用一個腳本將 A 列上的所有下拉選單作為觸發器?
這是腳本:
function onEdit(e) { //////menu trigers function
if (e.range.getA1Notation() == 'A9') { //////Menu cell
if (/^\w $/.test(e.value)) {
var sheet = SpreadsheetApp.getActive().getSheetByName('ORDERS'); /////// those 2 lines make the cell
var cellname = sheet.getRange(9,1); /////// go back to "Quick Access"
eval(e.value)();
e.range.clear();
cellname.setValue('');
}
}
}
function SendClear() {
Sendd();
clear1();
}
function Sendd() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName("ORDERS"); //Data entry Sheet
var datasheet = ss.getSheetByName("TakeAway"); //Data Sheet
//Input Values
var values = [[formSS.getRange("C9").getValue(),
formSS.getRange("J9").getValue(),
formSS.getRange("E9").getValue()]];
datasheet.getRange(datasheet.getLastRow() 1, 3, 1, 3).setValues(values); //inputs the data from "INPUT" into "DATA". ( 1 = adds new line. 1 = offset starting cell
}
提前致謝
uj5u.com熱心網友回復:
從It doesn't matter for me if it will a check box or a drop down menu. the main issue is that i need to write for each one of them an individual 'Send' Script. and what i would want to, if it's possible, is that that script will be able for the range of A9:A.,下面的示例腳本怎么樣?
示例腳本:
在此示例腳本中,復選框用于運行腳本。因此,請將復選框插入單元格“A9:A”。這樣,當復選框被選中時,腳本就會作業,而當腳本完成時,復選框會被取消選中。
function onEdit(o) {
var range = o.range;
var sheet = range.getSheet();
if (sheet.getSheetName() != "ORDERS" || range.columnStart != 1 || range.rowStart < 9 || !range.isChecked()) return;
var [c,,e,,,,,j] = sheet.getRange(range.rowStart, 3, 1, 8).getValues()[0];
o.source.getSheetByName("TakeAway").appendRow([c, j, e]);
sheet.getRangeList([`C${range.rowStart}`, `E${range.rowStart}`, `J${range.rowStart}`]).clearContent(); // When you want to clear the cells of "C", "E", "J", after the values were copied, please use this line.
range.uncheck();
}
- 當檢查“A9:A”的復選框時,腳本從列“C”,“J”,“E”按順序復制(這是從腳本。)到目標表。該值將附加到目標作業表。
筆記:
- 在此示例腳本中,源作業表名稱和目標作業表名稱是
ORDERS和TakeAway。這是來自您的腳本。因此,當您更改這些作業表名稱時,請修改上述腳本。 - 此腳本通過使用 OnEdit 觸發器運行來使用事件物件。所以當你直接用腳本編輯器運行這個腳本時,就會出現錯誤。請注意這一點。
關于一些不清楚的地方,我猜測如下。
- 我無法理解
clear1()您腳本中的功能。所以我猜你想在復制值后清除列“C”、“E”和“J”的單元格。所以我添加了sheet.getRangeList([C${range.rowStart},E${range.rowStart},J${range.rowStart} 的腳本]).clearContent();。如果我的猜測不正確,請洗掉它。
參考:
- 事件物件
uj5u.com熱心網友回復:
感謝田池!
這是答案:
function onEdit(o) {
var range = o.range;
var sheet = range.getSheet();
if (sheet.getSheetName() != "ORDERS" || range.columnStart != 1 || range.rowStart < 9 || !range.isChecked()) return;
var [c,,e,,,,,j] = sheet.getRange(range.rowStart, 3, 1, 8).getValues()[0];
o.source.getSheetByName("TakeAway").appendRow([null,null,c, j, e]); sheet.getRangeList([`C${range.rowStart}`, `E${range.rowStart}`, `J${range.rowStart}`]).clearContent(); // When you want to clear the cells of "C", "E", "J", after the values were copied, please use this line.
range.uncheck();
}
為了使單元格偏移到輸入資訊,我更改了這一行:
o.source.getSheetByName("TakeAway").appendRow([c, j, e]);
對此:
o.source.getSheetByName("TakeAway").appendRow([null,null,c, j, e]);
謝謝田池!
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407120.html
標籤:
