我需要帮助 - 这里有一点历史......
我有一个谷歌时间表 - https://docs.google.com/spreadsheet/ccc?key=0ArmKEmhue9OgdEFwMHBldFpGenNVdzJUQThCQU9Qcmc&usp=sharing
在该时间表中有很多表,但我希望得到帮助的是表格回复1和项目表
我有一个谷歌表格 - https://docs.google.com/forms/d/1yFy3i5H3abhFjdvchuJq2ARODcfRGo6KNkOAgeRIMMU/viewform
它与谷歌时间表相关联,每次提交数据都会在表单回复1表中显示 -
有一个应用于电子表格的脚本 -
复制到SCRIPT
/**
* A function named onEdit will be called whenever
* a change is made to the spreadsheet.
*
* @param {object} e The edit event (not used in this case)
*/
function onFormSubmit(e){
var copyFromRange = 'Form Responses 1!A2:AC999';
var copyToRangeStart = 'PROJECTS!A71:AC999';
copyValuesOnly(copyFromRange, copyToRangeStart);
}
/**
* This function will copy the values from a given range to
* a second range, which starts from the given cell reference
*
* @param {string} copyFromRange Range reference eg:
* @param {string} copyToRangeStart Cell reference eg:
*/
function copyValuesOnly(copyFromRange, copyToRangeStart) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var source = ss.getRange(copyFromRange);
source.copyTo(ss.getRange(copyToRangeStart), {contentsOnly: true});
}
这允许将数据复制到PROJECTS表,以便多个用户可以编辑和更新BUT,意识到每次提交新提交时它都会覆盖数据
还要在C&#34栏下的表格回复1表格中注明;项目编号"有一个forumula = ArrayFormula(" MC"& TEXT(行(A2:A)-1;""))我放置了允许自动为每个提交编号项目编号
我还有一个ARCHIVE脚本 -
项目最终完成后,在G"存档"如果你输入" DONE"然后它移动到ARCHIVE表
function onEdit(){
// moves a row from a sheet to another when a magic value is entered in a column
// adjust the following variables to fit your needs
// see https://productforums.google.com/d/topic/docs/ehoCZjFPBao/discussion
var sheetNameToWatch1 = "PROJECTS";
var sheetNameToWatch2 = "ADVERTISING";
var columnNumberToWatch = 7; // column A = 1, B = 2, etc.
var valueToWatch = "DONE";
var sheetNameToMoveTheRowTo = "ARCHIVE";
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getActiveCell();
if ( (sheet.getName() == sheetNameToWatch1 || sheet.getName() == sheetNameToWatch2) && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
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());
}
}
问题-COPYING - 使用表单输入新提交时,数据将显示在表单响应1表中,然后复制到PROJECTS表但您无法编辑PROJECTS下的数据,因为每个提交都会覆盖任何编辑并带来原始表格提交数据 -
我希望发生的是数据来自表单回复1表单,然后在每次提交时复制到PROJECTS表单,但是当新提交进入并且PROJECTS下的数据的任何更改都保留在那里时不会覆盖
问题 - 项目编号 - C表第2行下表单回复1表下的公式设置 - 每行都有一个项目编号,然后它复制到PROJECTS表,当行是archived(" DONE)并移动到ARCHIVE表格,分配给该行的项目编号与它一起使用但是当您提交新项目时,相同的编号可以应用于新项目,因此最终归档所有项目很多人会有相同的项目编号,有没有办法让每个项目都有一个独特的项目编号?
* 问题 - 提交表单* - 我不确定为什么但是当新的提交文件出现在第113行时,而不是在表单响应行的末尾?
任何帮助都会非常感激 - 我认为它会起作用,但似乎脚本不适合我想做的事情
非常感谢, Paola G
答案 0 :(得分:0)
以下是基于我如何处理这种情况的一些伪步骤:
然而,因为表单响应与响应电子表格紧密相关,所以在您尝试移动行时不是解决问题的最佳方法。
事实上,我敢说你根本不应该移动 - 相反,你可以做的是复制你正在寻找“DONE”的行中的值,然后只需隐藏响应电子表格中的那一行。这样,您可以将不隐藏的行视为“仍需要完成”。 完成的项目不仅会出现在响应电子表格中“存档/数据完整性”的目的,以及您可以面向公众的“已完成”电子表格等,而无需担心您的表单响应被修改。
就我个人而言,我使用这种策略为我所在大学的外语教师安排项目预订,这大大简化了同时管理两个电子表格所需的“额外工作”。相反,只需隐藏您不需要查看的值,并将它们发布到新的电子表格中,该电子表格可以作为重要记录,同时能够编辑电子表格的布局。
PS - 如果您没有注意到,则无法破坏响应电子表格的完整性,否则表单链接将被破坏。实际上,Google不允许您更改版面编辑以响应链接到表单的电子表格。
答案 1 :(得分:0)
感谢RiëlNotermans(Zzapps)获得了一个剧本
https://plus.google.com/u/0/116507112418725270540/posts/1i75t1wFEfh
function onFormSubmit(e){
var responses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Form Responses 1");
var projects = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("PROJECTS");
var lastrow = responses.getLastRow();
var col = responses.getLastColumn();
var row = responses.getRange(lastrow, 1, 1, col).getValues();
projects.appendRow(row[0]);
//copyValuesOnly(copyFromRange, copyToRangeStart);
}
确保两张纸下面没有空行,有一些项目编号。只需确保最后一行是数据。