一些背景:
(我希望我有更多的肉体代表,因为我想发布图像和链接到我的研究)。
我正在使用我们公司的Intranet Portal(在Google协作平台上)上的Awesome Tables gadget来获取电话簿,页面导航,序列号等。好吧,太棒了!
新项目旨在整合添加功能,更重要的是,直接从内部网门户编辑/更新Gmail联系人。我使用this example from the Awesome Tables site作为我的起点。
我需要什么!:
经过编辑的Google表单将响应电子表格(在正确的行上)中的单元格更新为“需要更新”的方法。我已经读过代码需要驻留在Google表单中才能使触发器工作(如果代码在电子表格中,则onFormSubmit不能用于编辑)。
此外,对代码道歉并且如果我没有正确地编写编码术语,那么我首先要去处理一些bash脚本之外的任何严重问题。此外,如果这一切都可以通过其他方式完成,以便您仍然可以在Google网站上对您的Gmail联系人进行“实时”和可编辑的反映,我对此持开放态度。请继续阅读!
我在哪里:
电子表格代码:
// Sheet Variables Below
var sheet = SpreadsheetApp.getActiveSheet();
var headerRows = 2;
var MaxRow = sheet.getLastRow();
var dataRange = sheet.getDataRange();
var data = dataRange.getValues(); // Read all data
data.splice(0,headerRows); // Remove header rows
function addContact() {
for (var i = 0; i < data.length; i++) {
var row = data[i];
var firstName = row[1];
var lastName = row[2];
var emailAdd = row[3];
var companyAdd = row[4];
var positionAdd = row[5];
var mobileAdd = row[6];
var workphoneAdd = row[7];
var addressAdd = row[8];
var statusRow = row[9];
if(statusRow != "Uploaded") {
var contact = ContactsApp.createContact(firstName, lastName, emailAdd);
contact.addPhone(ContactsApp.Field.MOBILE_PHONE, mobileAdd);
contact.addPhone(ContactsApp.Field.WORK_PHONE, workphoneAdd);
contact.addCompany(companyAdd, positionAdd);
contact.addAddress(ContactsApp.Field.WORK_ADDRESS, addressAdd)
var group = ContactsApp.getContactGroup("System Group: My Contacts");
group.addContact(contact);
// Finally, once we have uploaded the contact, set Status to "Uploaded".
for (var iRow = 3; iRow <= MaxRow; iRow++) {
sheet.getRange("K" + iRow).setValue('Uploaded');
}
}
}
}
function updateContact() {
for (var i = 0; i < data.length; i++) {
var row = data[i];
var statusRow = row[9];
if(statusRow == "Needs Update") {
// Retrieve Contact by email address and delete. If they have changed the email address though you are in big trouble and will receive an error. TODO!
var contact = ContactsApp.getContact(row[3]); ContactsApp.deleteContact(contact);
// Remove "Needs Update"
for (var iRow = 3; iRow <= MaxRow; iRow++) {
var value = sheet.getRange("K" + iRow).getValue();
if(value == 'Needs Update'){
sheet.setActiveRange(sheet.getRange(iRow, 11)).setValue('');
}
}
}
}
// Re-run the addContact to effectively have "updated" the contact data.
addContact();
}
var formURL = 'https://<formURLgoesHERE>/viewform';
var sheetName = 'Form Responses';
var columnIndex = 11;
var statusIndex = 10;
function getEditResponseUrls(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
var data = sheet.getDataRange().getValues();
var form = FormApp.openByUrl(formURL);
for(var i = 2; i < data.length; i++) {
if(data[i][0] != '' && data[i][columnIndex-1] == '') {
var timestamp = data[i][0];
var formSubmitted = form.getResponses(timestamp);
if(formSubmitted.length < 1) continue;
var editResponseUrl = formSubmitted[0].getEditResponseUrl();
var status = "Just Added";
var button = '<div style="text-align:center"><a href="' + editResponseUrl + '" ';
button+= 'style="color:white!important;text-decoration:none;background-color:rgb(209,72,54);background-image:-webkit-linear-gradient(top,rgb(221,75,57),rgb(209,72,54));border:1px solid rgba(0,0,0,0);border-radius:2px;display:inline-block;font-size:11px;font-weight:bold;height:27px;line-height:27px;padding:0px 20px 0px 20px;text-align:center;text-transform:uppercase;white-space:nowrap"';
button+= 'target="_blank">Edit entry</a></div>';
sheet.getRange(i+1, statusIndex).setValue(status);
sheet.getRange(i+1, columnIndex).setValue(button);
}
}
}
因此,通过上述内容,我可以从表单条目创建新联系人,并且如果状态列是“需要更新”,我可以删除联系人并使用新的详细信息重新添加联系人(除非电子邮件地址是改变的值,这是我知道的一个明显的缺陷 - 如果你也能解决这个问题,可以获得奖励积分。)
要点:
当他们提交新条目时,一切正常。但是,如果他们然后点击编辑按钮并在表单中更新他们的详细信息,我需要一种方法将状态更新为“需要更新”,因为这是我的“updateContact”功能正在寻找的。 p>
会喜欢思想或指导,我已经沉浸在这里,并且真的很想让它发挥作用。我觉得它“非常接近”,我只需要一个小变量来实现我的功能触发器“让它超越线路”,我希望你能做到这一点!
答案 0 :(得分:0)
我不确定我是否完全理解你的问题,但这可能是一个孤独。
创建触发器
首先,您需要创建一个触发器,以便在提交表单时运行needsUpdate()
函数。您可以通过编程方式执行此操作,如下所示。
function onInstall(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
ScriptApp.newTrigger("needsUpdate").forSpreadsheet(ss).onFormSubmit().create();
}
或者,您可以通过选择&#34;资源&#34;在脚本编辑器中手动添加触发器。顶部菜单中的按钮然后选择&#34;当前项目的触发器&#34;然后&#34;添加一个新的触发器&#34;。然后,您应该在第一个下拉菜单中选择needsUpdate()
功能,&#34;来自电子表格&#34;在第二个下拉菜单中,&#34;在表单提交&#34;在第三个下拉菜单中。
创建needsUpdate()
功能
接下来,您必须创建一个在表单提交上运行的函数。该功能将转到statusRow
并添加&#34;需要更新&#34;。传递给此函数的e
是从表单提交传递给它的data。
function needsUpdate(e) {
// the columns and rows could change depending on how you spreadsheet is set up
var column = e.range.getColumn()
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
sheet.getRange(9, column).setValue("Needs Update");
}