【发布时间】:2014-10-24 20:08:38
【问题描述】:
我有这个简单的脚本:
function myFunction() {
var ssh = SpreadsheetApp.getActiveSpreadsheet();
var ss = ssh.getActiveSheet();
var s = ss.getActiveRange();
var rowIndex = s.getRowIndex();
var colIndex = s.getColumnIndex();
// Get the number of columns in the active sheet.
var colNumber = ss.getLastColumn();
if (colIndex == 1 && rowIndex != 1) {
//Get User Name from inputBox
var name = Browser.inputBox('Owner', 'Enter your Name', Browser.Buttons.OK_CANCEL);
var r1 = ss.getActiveRange().getRow();
//Insert the Name in the active row in the column 6
ss.getRange(r1, 6).setValue(name)
//Here I have other part of the code but is for copy rows to other sheet.
}
}
在第 6 列有活动数据验证(不允许插入不在项目列表中的值)。 示例:查尔斯、奥斯卡、保罗、其他。如果我输入全部小写的名称,请不要输入。如果输入的值与“Charles”相同,则输入该值。
现在,这些值有可能在输入框中显示为下拉列表吗?我的意思是,用户可以从该列表中进行选择,然后按 Enter 或 Ok 并将值插入到单元格中。
注意:这不是表格。这是电子表格。
谢谢,
更新日期:2014 年 1 月 9 日
function Historic(e) { //CopyRows
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
if (s.getName() == 'ISP1'){
var r = SpreadsheetApp.getActiveRange();
// Get the row and column of the active cell.
var rowIndex = r.getRowIndex();
var colIndex = r.getColumnIndex();
// Get the number of columns in the active sheet.
var colNumber = s.getLastColumn();
// Move row based on criteria in column 1, and if row is not the header.
if (colIndex == 1 && rowIndex != 1) { // 1 Is the Comment Column
//Call the Function Menu List
showNamePicker();
//Get values for the active row bases on the criteria.
var status = s.getRange(rowIndex, colIndex).getValue();
// --------------- Copy ROW only when someone modify the Column1 --------------------------
// Do nothing if criteria value is not actually changed to something else.
if (s.getName() != 'Historic') {
// The target sheet is the one with the same name as the criteria value.
var targetSheet = ss.getSheetByName('Historic');
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
//=====Copy the Row from ISP1 to Historic=======
s.getRange(rowIndex, 1, 1, colNumber).copyTo(target);
}
}
}
}
function showNamePicker() {
var app = UiApp.createApplication().setHeight(100).setWidth(180);
var handler = app.createServerHandler('setName');
var list = app.createListBox().setName('list').addChangeHandler(handler);
var names = ['Choose a name here','Charles', 'Oscar', 'Paul', 'Other'];
for(var n in names){
list.addItem(names[n]);
}
handler.addCallbackElement(list);
app.add(list);
SpreadsheetApp.getActive().show(app);
}
function setName(e){
var ssh = SpreadsheetApp.getActiveSpreadsheet();
var ss = ssh.getActiveSheet();
var r1 = ss.getActiveRange().getRow();
ss.getRange(r1, 6).setValue(e.parameter.list);
}
Function Historic:如果有人修改了第 1 列,脚本会将修改后的行中的所有数据复制到历史记录。
需要:
脚本应在该行的第 6 列插入名称,然后脚本将该行复制到历史记录。
问题:
当有人修改第 1 列时,用户按 ENTER 键,新的活动行发生更改,因为不一样,并且脚本没有在被修改的行中插入名称。 例如: 我修改 A2 并按 ENTER 新行是 A3,脚本会将信息插入 F3 而不是 F2。
我尝试在此行之前调用该函数:
//根据条件获取活动行的值。
var status = s.getRange(rowIndex, colIndex).getValue();
但我还是新手......我这很容易,但我无法解决这个问题。
如果您能帮助我,我将不胜感激。
示例:
更改单元格 A2 = ID#12578 该脚本应在 F2 列中插入名称,然后复制所有行,包括名为 Historic 的工作表中的 F2。 (脚本不是将名称插入 F2 而是插入 F3
【问题讨论】:
标签: google-apps-script google-sheets