【发布时间】:2019-12-02 13:02:20
【问题描述】:
我需要帮助 - 这里有一点历史......
我有一个谷歌时间表 - https://docs.google.com/spreadsheet/ccc?key=0ArmKEmhue9OgdEFwMHBldFpGenNVdzJUQThCQU9Qcmc&usp=sharing
在该时间表内有许多工作表,但我希望获得帮助的是表格响应 1 和项目工作表
我有一个谷歌表单 - https://docs.google.com/forms/d/1yFy3i5H3abhFjdvchuJq2ARODcfRGo6KNkOAgeRIMMU/viewform
它链接到谷歌时间表,每次提交时,数据都会出现在表单响应 1 表中 -
有一个脚本应用于电子表格 -
复制到/从脚本
/**
* 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 表,以便多个用户可以编辑和更新,但意识到每次新提交进入时它都会覆盖数据
还要注意,在 C 列“项目编号”下的 Form Responses 1 表中,我放置了一个 forumula =ArrayFormula("MC"&TEXT(ROW(A2:A)-1 ; "000") )允许使用项目编号自动对每个提交进行编号
我还有一个 ARCHIVE 脚本 -
一旦项目完成,如果您在 G 列“存档”下键入“完成”,它就会移动到存档表
函数 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());
}
}
问题 - 复制 - 当使用表单输入新的提交时,数据会出现在 Form Responses 1 表中,然后复制到 PROJECTS 表但您无法在 PROJECTS 下编辑数据,因为每次提交都会覆盖任何编辑并引入原始表单提交数据 -
我希望发生的情况是数据进入 Form Responses 1 表,然后在每次提交时复制到 PROJECTS 表,但是当新提交进入并且对 PROJECTS 下数据的任何更改保留在那里时不会覆盖
p>问题 - 项目编号 - 表格响应 1 表下 C 列第 2 行下的公式设置 - 每一行都分配了一个项目编号,然后复制到项目表,当该行是存档(“完成)并移动到存档表分配给该行的项目编号随之而来但是当您提交新项目时,相同的编号可以应用于新项目,因此最终当您归档所有项目时,许多人将拥有相同的项目编号,有没有办法让每个项目都有唯一的项目编号?
*问题 - 提交表格 * - 我不知道为什么,但是当有新的提交进入时,数据每次都会出现在第 113 行,而不是在表单响应行的末尾?
任何帮助将不胜感激 - 我认为它会起作用,但似乎脚本不是我想要它做的正确设置
非常感谢, 保拉·G
【问题讨论】:
-
您必须将整个内容复制到工作表
PROJECTS?您不仅可以从表单中复制到达工作表Form Responses 1的每个新条目吗? -
嗨,是的,我想将表单响应 1 表中的每个新条目复制到项目表中 - 可以使用脚本吗?
-
使用脚本我认为有可能得到您需要的东西,我的建议是了解Understanding Events 中的 Google Apps Script 中提供的事件模型。
-
谢谢您,不幸的是,这超出了我的想象-我不知道如何使用事件设置正确的脚本-这是否可以从表单响应中复制新条目到项目表,然后在提交表单时只复制一次?
标签: google-apps-script google-sheets