Google apps script 为Google表单条目添加审批步骤->;谷歌表单/文档
我希望将此公开信/谷歌套件工作流()与额外的批准步骤结合起来,这需要某种形式的批准(例如,谷歌工作表中的复选框,或谷歌工作表中的某种编辑/更改),然后才将信息传递给最终的谷歌文档。我已经能够使用杰弗里·埃弗哈特(Jeffrey Everhart)的代码(见下文)成功地设置一个Google表单->Google表单->Google文档公开信工作流,该工作流获取Google表单信息并在表单提交时将其添加到Google文档中。但我无法让脚本在编辑/更改触发器上工作,尽管我昨天一整天都在努力。这将是理想的,因为我可以简单地在google表单中添加一个复选框“Approval”列,指示表单提交是否应继续添加到google文档的下一步。有什么建议吗Google apps script 为Google表单条目添加审批步骤->;谷歌表单/文档,google-apps-script,google-sheets,automation,google-forms,Google Apps Script,Google Sheets,Automation,Google Forms,我希望将此公开信/谷歌套件工作流()与额外的批准步骤结合起来,这需要某种形式的批准(例如,谷歌工作表中的复选框,或谷歌工作表中的某种编辑/更改),然后才将信息传递给最终的谷歌文档。我已经能够使用杰弗里·埃弗哈特(Jeffrey Everhart)的代码(见下文)成功地设置一个Google表单->Google表单->Google文档公开信工作流,该工作流获取Google表单信息并在表单提交时将其添加到Google文档中。但我无法让脚本在编辑/更改触发器上工作,尽管我昨天一整天都在努力。这将是理想的
函数附录SignatureRow(e){
//由于可能会有一群人提交,因此每次执行时我们都会锁定脚本
//有30秒的超时时间,因此不会覆盖任何内容
const lock=LockService.getScriptLock();
lock.waitLock(30000);
//这里我们从表单提交事件中读取变量
const date=新日期(e.values[0])。toLocaleDateString();
//当然,如果您希望文档中的时间,可以使用toLocaleString方法
const name=e.values[1];
const affiliation=e.values[2];
const country=e.values[3];
//接下来,将这些值格式化为对应于表行布局的数组
//在你的谷歌文档中
const tableCells=[姓名、隶属关系、国家/地区、日期]
//下一步,我们打开信,得到它的正文
const letter=DocumentApp.openById('INSERT ID HERE')
const body=letter.getBody();
//接下来,我们得到文档中的第一个表,并附加一个空表行
const table=body.getTables()[0]
const tableRow=table.appendTableRow()
//在这里,我们从上方循环遍历表格单元格并添加
//将表格单元格添加到每个数据段的表格行
tableCells.forEach(函数(单元格,索引){
设appendedCell=tableRow.appendTableCell(单元格)
})
//在这里,我们保存并关闭信件,然后释放锁
letter.saveAndClose();
锁。释放锁();
}
如何使用onFormSubmit
将复选框添加到谷歌表单中的每个条目,并使用onEdit
验证复选框并写入谷歌文档
在这里,我为onFormSubmit
创建了一个函数,该函数将把复选框附加到新条目中,并修改了appendSignatureRow()
的一些部分,并将其用作onEdit
的函数,以便在选中条目时触发写入Google文档
例子:
表格:
function formSubmit(e){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; //get form response sheet
var col = e.range.getLastColumn();
var row = e.range.getLastRow();
sheet.getRange(row, col+1).insertCheckboxes(); // add checkbox
}
function appendSignatureRow(e) {
var sheetName = e.source.getSheetName(); //get sheet name
var editedRow = e.range.getRow(); // get edited row number
var editedCol = e.range.getColumn(); //get editer column number
if(editedRow > 1 && editedCol == 6 && sheetName == 'Form Responses 1' && e.value == 'TRUE'){
const lock = LockService.getScriptLock();
lock.waitLock(30000);
var sheet = e.source.getSheetByName('Form Responses 1');
var data = sheet.getRange(editedRow, 1, 1, editedCol -1).getValues()[0]; // get edited row data
const date = new Date(data[0]).toLocaleDateString();
const name = data[1];
const affiliation = data[2];
const country = data[3];
const tableCells = [name, affiliation, country, date]
const letter = DocumentApp.openById('Insert Docs ID here')
const body = letter.getBody();
const table = body.getTables()[0]
const tableRow = table.appendTableRow()
tableCells.forEach(function(cell, index) {
tableRow.appendTableCell(cell)
})
letter.saveAndClose();
lock.releaseLock();
}
}
电子表格数据:
function formSubmit(e){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; //get form response sheet
var col = e.range.getLastColumn();
var row = e.range.getLastRow();
sheet.getRange(row, col+1).insertCheckboxes(); // add checkbox
}
function appendSignatureRow(e) {
var sheetName = e.source.getSheetName(); //get sheet name
var editedRow = e.range.getRow(); // get edited row number
var editedCol = e.range.getColumn(); //get editer column number
if(editedRow > 1 && editedCol == 6 && sheetName == 'Form Responses 1' && e.value == 'TRUE'){
const lock = LockService.getScriptLock();
lock.waitLock(30000);
var sheet = e.source.getSheetByName('Form Responses 1');
var data = sheet.getRange(editedRow, 1, 1, editedCol -1).getValues()[0]; // get edited row data
const date = new Date(data[0]).toLocaleDateString();
const name = data[1];
const affiliation = data[2];
const country = data[3];
const tableCells = [name, affiliation, country, date]
const letter = DocumentApp.openById('Insert Docs ID here')
const body = letter.getBody();
const table = body.getTables()[0]
const tableRow = table.appendTableRow()
tableCells.forEach(function(cell, index) {
tableRow.appendTableCell(cell)
})
letter.saveAndClose();
lock.releaseLock();
}
}
可安装触发器设置:
function formSubmit(e){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; //get form response sheet
var col = e.range.getLastColumn();
var row = e.range.getLastRow();
sheet.getRange(row, col+1).insertCheckboxes(); // add checkbox
}
function appendSignatureRow(e) {
var sheetName = e.source.getSheetName(); //get sheet name
var editedRow = e.range.getRow(); // get edited row number
var editedCol = e.range.getColumn(); //get editer column number
if(editedRow > 1 && editedCol == 6 && sheetName == 'Form Responses 1' && e.value == 'TRUE'){
const lock = LockService.getScriptLock();
lock.waitLock(30000);
var sheet = e.source.getSheetByName('Form Responses 1');
var data = sheet.getRange(editedRow, 1, 1, editedCol -1).getValues()[0]; // get edited row data
const date = new Date(data[0]).toLocaleDateString();
const name = data[1];
const affiliation = data[2];
const country = data[3];
const tableCells = [name, affiliation, country, date]
const letter = DocumentApp.openById('Insert Docs ID here')
const body = letter.getBody();
const table = body.getTables()[0]
const tableRow = table.appendTableRow()
tableCells.forEach(function(cell, index) {
tableRow.appendTableCell(cell)
})
letter.saveAndClose();
lock.releaseLock();
}
}
代码:
function formSubmit(e){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; //get form response sheet
var col = e.range.getLastColumn();
var row = e.range.getLastRow();
sheet.getRange(row, col+1).insertCheckboxes(); // add checkbox
}
function appendSignatureRow(e) {
var sheetName = e.source.getSheetName(); //get sheet name
var editedRow = e.range.getRow(); // get edited row number
var editedCol = e.range.getColumn(); //get editer column number
if(editedRow > 1 && editedCol == 6 && sheetName == 'Form Responses 1' && e.value == 'TRUE'){
const lock = LockService.getScriptLock();
lock.waitLock(30000);
var sheet = e.source.getSheetByName('Form Responses 1');
var data = sheet.getRange(editedRow, 1, 1, editedCol -1).getValues()[0]; // get edited row data
const date = new Date(data[0]).toLocaleDateString();
const name = data[1];
const affiliation = data[2];
const country = data[3];
const tableCells = [name, affiliation, country, date]
const letter = DocumentApp.openById('Insert Docs ID here')
const body = letter.getBody();
const table = body.getTables()[0]
const tableRow = table.appendTableRow()
tableCells.forEach(function(cell, index) {
tableRow.appendTableCell(cell)
})
letter.saveAndClose();
lock.releaseLock();
}
}
输出:
function formSubmit(e){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; //get form response sheet
var col = e.range.getLastColumn();
var row = e.range.getLastRow();
sheet.getRange(row, col+1).insertCheckboxes(); // add checkbox
}
function appendSignatureRow(e) {
var sheetName = e.source.getSheetName(); //get sheet name
var editedRow = e.range.getRow(); // get edited row number
var editedCol = e.range.getColumn(); //get editer column number
if(editedRow > 1 && editedCol == 6 && sheetName == 'Form Responses 1' && e.value == 'TRUE'){
const lock = LockService.getScriptLock();
lock.waitLock(30000);
var sheet = e.source.getSheetByName('Form Responses 1');
var data = sheet.getRange(editedRow, 1, 1, editedCol -1).getValues()[0]; // get edited row data
const date = new Date(data[0]).toLocaleDateString();
const name = data[1];
const affiliation = data[2];
const country = data[3];
const tableCells = [name, affiliation, country, date]
const letter = DocumentApp.openById('Insert Docs ID here')
const body = letter.getBody();
const table = body.getTables()[0]
const tableRow = table.appendTableRow()
tableCells.forEach(function(cell, index) {
tableRow.appendTableCell(cell)
})
letter.saveAndClose();
lock.releaseLock();
}
}
参考: