我正在尝试编写一些函数
var sheetNameToWatch = "Form Responses";
var columnNumberToWatch = 3;
var sheetNameToMoveTheRowTo = "All Leads";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && isBlank(range) == FALSE) {
var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
//sheet.deleteRow(range.getRow());
}
}
但我不会让它触发onEdit或onFormSubmission。非常感谢您的帮助,正如您所知,我对脚本编写还不熟悉。
这是共享的谷歌电子表格
https://docs.google.com/spreadsheets/d/13090GHrXY17lRzA9ppQHZZGyT9yUNk6hMMXDQIKmddI/edit?usp=sharing
由于您的电子表格中已经存储了条目,因此您只需运行此代码段一次,即可将已存储的值复制到它们所在的位置。这是通过使用getRange(row,col,numrows,numcols)
方法收集表单响应
表中需要的所有数据,然后使用setValues()
方法粘贴值来实现的。
function copyStuff() {
var spreadsheet = SpreadsheetApp.openById("ID_OF_YOUR_SPREADSHEET");
var allLeads = spreadsheet.getSheetByName("All Leads");
var formSub = spreadsheet.getSheetByName("Form Responses");
var valsFromForm = formSub.getRange(3, 1, 53, 13).getValues();
allLeads.getRange(2, 1, 53, 13).setValues(valsFromForm);
}
之后,您应该用下面的代码段替换上面的代码段:
function onFormSubmit() {
var spreadsheet = SpreadsheetApp.openById("ID_OF_YOUR_SPREADSHEET");
var allLeads = spreadsheet.getSheetByName("All Leads");
var formSub = spreadsheet.getSheetByName("Form Responses");
var openSheet = spreadsheet.getSheetByName("Open Leads");
var closedSheet = spreadsheet.getSheetByName("Closed");
var lostSheet = spreadsheet.getSheetByName("Lost");
var lastVals = formSub.getRange(formSub.getLastRow(), 1, 1, 13).getValues();
allLeads.getRange(allLeads.getLastRow(), 1, 1, 13).setValues(lastVals);
var cellValue = spreadsheet.getSheetByName("THE_NAME_OF_YOUR_SHEET_WHERE_CELL_VALUE_IS").getValue();
if (cellValue == "OPEN")
openSheet.getRange(openSheet.getLastRow(), 1, 1, 13).setValues(lastVals);
else if (cellValue == "CLOSED")
closedSheet.getRange(closedSheet.getLastRow(), 1, 1, 13).setValues(lastVals);
else if (cellValue == "LOST")
lostSheet.getRange(lostSheet.getLastRow(), 1, 1, 13).setValues(lastVals);
var lastVals = formSub.getRange(formSub.getLastRow(), 1, 1, 13).getValues();
allLeads.getRange(allLeads.getLastRow(), 1, 1, 13).setValues(lastVals);
}
上面的代码片段的工作原理是从电子表格中获取最后一行,然后根据cell Value
将其粘贴到正确的位置。要获取工作表的最后一行,使用了getLastRow()
方法。
因为您希望它在每个表单提交上运行,所以您应该使用一个onFormSubmit()
可安装触发器,并像这样配置它:
注意:您必须将脚本链接到表单。
参考文献
>
Sheet类应用程序脚本-getRange();
工作表类应用程序脚本-getLastRow();
可安装触发器应用程序脚本。
我有一个多标签谷歌表。第一个是主表,我有一些基本的位置信息。在其他页面中,我通过“导入”传输这些基本信息,因此我有一些列动态更改,一些是静态的,用户可以更新。尽管如此,如果我在主工作表的数据之间添加一行,它只会更改动态列(从importrange更新),而其余列不会更改-这会影响更新。在主工作表中添加行时,是否有任何方法/脚本可以自动在其他工作表中添加行?
我最近在GoogleSheets的脚本编辑器中添加了一个脚本,可以根据D列中的值对我的页面进行自动排序。该脚本被设置为应用于活动页面–我们称之为“sheet a” 使用工作表A,人们可以按降序查看数据排序,这很好。每次对图纸a进行更改/编辑时,数据都会自动恢复。 我在工作表A中做了大量的单元格合并、样式设置、条件格式设置等,我不想再重新创建它。所以我复制了A页- 问题:我在表A中添加的自定义脚本正
我希望表2(标题为“托管交易”)按日期自动排序,表1(标题为“贷款查询”)按姓氏自动排序。两张表都在一张谷歌表中。我已经找到了下面的脚本,我对它进行了轻微的修改,它在第2页上的效果非常好,可以按日期自动排序; 但是,我希望第一张工作表按照第2列中的姓氏自动排序,而不是脚本所指的第7列 值得一提的是,我对脚本做了以下更改,并在下面的脚本中添加了按姓氏排序的脚本,该脚本在第1页的第2列中运行良好; 但
上下文 我正在创建一个股票价格数据数据库。我目前正在使用下面的函数: 这允许在编辑单元格时对某些列执行编辑。到目前为止,它是有效的,但有一些扭结。 问题1 有时,当我编辑列的第四行上方的单元格时,它会编辑整个列,尽管我告诉它从第四行开始。这发生在几分钟前的一个单元格中,我告诉它排除上面的“I2”。我为此编写的代码有什么问题吗? 问题2我尝试为代码创建其他异常,其中对于某些指定的范围,它将仅从不同的
我试图将活动工作表和2个指定工作表复制到一个新工作簿,然后让宏继续在新工作簿上运行,以便在保存它之前更改一些内容 null
我正在尝试设置输入新数据时Google Sheets文档的自动排序。 链接到工作表:https://docs.google.com/spreadsheets/d/1h2-Gy67sTGKdMhG9GP-intB5fVdaJheZIcLo4Nto_Wg/edit?usp=sharing 显然,这些是玩家统计数据。我试图找出一个解决方案,让列“H”按降序对玩家进行排序。这意味着得分最多的玩家将是第一名