比较电子表格 1 和电子表格 2,然后发送电子邮件问题
compare spreadsheet 1 and spreadsheet 2, then send email problem
谁能帮帮我。如果我不能正确解释所有内容,我想说声抱歉,因为英语不是我的母语。我正在做的是创建一个 Google 表单。这是例子。
第 1 部分:
Google 表格 1 |电子表格 1:在 google 表格中,输入信息后。电子表格更新每一行。 IT 人员将根据报告修复问题。 IT 人员完成后,他将使用 Google 表格 2。
第二部分:
Google 表格 2 |电子表格 2:IT 人员使用第二个 Google 表格来关闭工单或待定工单。如果 IT 人员提交表格,它会向电子表格 1 中的电子邮件地址发送电子邮件,并说出工单 ID(在电子表格 1 和 2 中找到的列),说工单状态(在电子表格 2 中找到的列),说在电子邮件中报告问题详细信息(在电子表格 1 中找到的列)。怎么办?
这是我编写的代码。
function myFunction(e) {
// declare variables
var Timestamp = e.values[0];
var TicketID = e.values[1];
var Email = e.values[2];
var Status = e.values[3];
var ss = SpreadsheetApp.openById(INSERT SPREADSHEET ID 1 INSIDE);
var DetailsCol = 6; // column number of Report Problem Details from Spreadsheet 1
/* This is the part I not know how to get. I want to compare Ticket ID
from Spreadsheet 1 to Spreadsheet 2, and if they’re same, then it returns the value of
“Report Problem Details” that is associate to the Ticket ID match,
and save it to Spreadsheet 2 column F, then send email with this value.*/
var ss1value = ss.getDataRange().getValues();
for(var i = 0; i<data.length;i++){
if(data[i][1] == TicketID){ //start 0 index
return i+1;
}
}
ss1value.getRange(i, 5).setValue(Report Problem Details);
// Email Send
var Subject = "Ticket Status";
var Message =
'<!DOCTYPE html> ' +
"<html><head>" +
"<table border='1' width='300'>" +
"<tr><td>Case ID</td><td>" + TicketID +
"<tr><td>Status</td><td>" + Status +
"<tr><td>Problem Description</td><td>" + 'Details' +
"</table>" +
MailApp.sendEmail(Email, Subject, "", {htmlBody: Message});
}
您正在使用 Google 表格和 Google 表格构建支持票系统。您在匹配来自两个价差 sheet 的票号时遇到问题。
提供以下脚本是为了简化票证管理,因此不需要 "matching"。有两个脚本:
so5894534201(e)
:应作为可安装的 onFormSubmit 触发器安装。
onEdit(e)
: 执行 onEdit 的脚本。
so5894534201(e)
一般的方法是用户提交更新表单响应的表单 sheet。 onFormSubmit 捕获响应并将其添加到 "Support" sheet。它还添加了一个额外的字段 "Status",它为其分配数据验证规则(选项为 "Open"、"Pending" 和 "Closed"),并设置初始值 "Open".
onEdit(e)
这会监视支撑 sheet 上状态的变化。预期的操作是向提交机票的人发送一封电子邮件。我把这个留给你完成。
function so5894534201(e) {
// to be installaed as an Installable onFormSubmit trigger
var ss = SpreadsheetApp.getActiveSpreadsheet();
// reference the sheets
var responsesheetname = "Form Responses 1";
var response = ss.getSheetByName(responsesheetname);
var supportsheetname = "support";
var support = ss.getSheetByName(supportsheetname);
var settingssheetname = "settings";
var settings = ss.getSheetByName(settingssheetname);
// event objects
//Logger.log(JSON.stringify(e)); // DEBUG
// create temporary array to hold response values
var responsedata = [];
responsedata.push(e.values[0]);
responsedata.push(e.values[1]);
responsedata.push(e.values[2]);
responsedata.push(e.values[3]);
responsedata.push(e.values[4]);
responsedata.push(e.values[5]);
// get last row on Support
var Avals = support.getRange("A1:A").getValues();
var supportLR = Avals.filter(String).length;
// Logger.log("DEBUG: the last row in support = "+supportLR)
// get the range to the next support response
var supportRange = support.getRange(supportLR+1,1,1,6);
// Logger.log("DEBUG: the suppport target range = "+supportRange.getA1Notation())
// build status cell on Support
var cell = support.getRange(+supportLR+1,7);
// Logger.log("DEBUG: the status cell range is "+cell.getA1Notation());
// build the data validation rule
var settingsRange = settings.getRange("A2:A4");
var statusrule = SpreadsheetApp.newDataValidation()
.requireValueInRange(settingsRange, true)
.build();
//set the rule
cell.setDataValidation(statusrule);
// Update the initial Status value
cell.setValue("Open");
// Update the support range with the latest response
supportRange.setValues([responsedata]);
}
function onEdit(e){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var supportsheetname = "support";
var support = ss.getSheetByName(supportsheetname);
// get the event objects
//Logger.log(JSON.stringify(e)); // DEBUG
var column = e.range.getColumn();
var sheet = e.range.getSheet().getName();
var newStatus = e.value; // new status value
var oldStatus = e. oldValue // old value
// if column = column 7 (G) && sheet = "support" && newstatus isn't Open (i.e. isn't the new support response
if(column == 7 && sheet == supportsheetname && newStatus != "Open"){
// do stuff
//get the data
var row = e.range.getRow();
var supportdataRange = support.getRange(row,1,1,7);
Logger.log("support data range = "+supportdataRange.getA1Notation());
Logger.log("Edited row = "+row);
var supportdata = supportdataRange.getValues();
var timeStamp = supportdata[0][0];
var ticketNumber = supportdata[0][1];
Logger.log("Error logged:"+timeStamp+", Ticket Number:"+ticketNumber)
var name = supportdata[0][2];
var phone = supportdata[0][3];
var email = supportdata[0][4];
var problem = supportdata[0][5];
Logger.log("Name:"+name+", Phone:"+phone+", Email:"+email+", Problem:"+problem);
// Logger.log("DEBUG: onedit was triggered the old status was "+oldStatus+", and the new status is "+newStatus)
// send an email with this information
}
else
{
// nothing to do because status wasn't chnaged from "Open"
Logger.log("DEBUG: do nothing - status wasn't changed FROM 'Open'")
}
}
支持sheet
设置sheet
您正在使用 Google 表格和 Google 表格构建支持票系统。
- 用户将表格#1 提交给 Spreadsheet#1 - Ticket Number 是唯一值;
- IT 支持回复表单;
- IT 支持通过将表格 #2 提交到 Spreadsheet#2;
来更新他们自己的记录
- 当 IT 支持从 "Open" 以外的其他内容更新状态(在 Spreadsheet#2 上)时,应向用户发送一封电子邮件;
- 由于 Spreadsheet#2 没有 Form Response 中的所有信息,因此需要将唯一的 Ticket Number(来自 Spreadsheet#2)与传播sheet#1 以检索用户名、电子邮件和其他相关数据。
您在匹配两个价差之间的票号时遇到问题sheet。
以下脚本演示了将值与数组匹配的方法。关键方面是:
- 此脚本必须 运行 来自 Spreadsheet#2
onEdit(e)
: 脚本必须在 onEdit 触发器上,以便它检测支持更新状态(此脚本中不包含其逻辑)
openById()
:注意 Spreadsheet#1 是如何被访问的
var formValues = formRange.getValues();
:从响应中获取所有值 sheet
var formTickets = formValues.map(function(e){return e[1];});
:使用javascript map方法只创建一个临时票号数组
var TickedID = support.getRange(editedrow,2).getValue();
:利用 Event Objects 从 Spreadsheet#1 获取票号
var result = formTickets.indexOf(TicketID);// result is zero-based.
:在Form Ticket Numbers数组中查找支持Ticket Number的匹配项;这使用 javascript indexOf 方法。值为 -1 表示不匹配,否则该值为数组中票号的基于 zer0 的索引。
var email = formValues[result][4];
:一旦您知道 "result" 值,您就可以从表单值中访问该票证的其余详细信息。
function onEdit(e){
// Spreadsheet#2 containing the IT support logs
var ss = SpreadsheetApp.getActiveSpreadsheet();
var supportsheetname = "support";
var support = ss.getSheetByName(supportsheetname);
// Spreadsheet #1 containing the form responses
var s2id = "<insert spreadsheetID here>";
var s2 = SpreadsheetApp.openById(s2id);
var formsheetname = "Form Responses 1";
var form = s2.getSheetByName(formsheetname);
// get data from forms
var Avals = form.getRange("A1:A").getValues();
var formLR = Avals.filter(String).length;
var formRange = form.getRange(2,1,formLR-1,6);
var formValues = formRange.getValues();
//get the ticket Numbers in a temporary array
var formTickets = formValues.map(function(e){return e[1];});//[[e],[e],[e]]=>[e,e,e]
// Logger.log(formTickets);//DEBUG
// get the row that was edited by the IT support
var editedrow = e.range.getRow();
var TicketID = support.getRange(editedrow,2).getValue();
Logger.log("the Ticket ID is "+TicketID);
// find the ticket number in the responses
var result = formTickets.indexOf(TicketID);// result is zero-based.
if (result != -1){
// Logger.log("DEBUG: the result is "+result); // result is zero-based
// declare variables
var Status = e.value; // new status value
var Timestamp = formValues[result][0];
var Name = formValues[result][2];
var Phone = formValues[result][3];
var Email = formValues[result][4];
var Problem = formValues[result][5];
Logger.log("Ticket ID:"+TicketID+", Timestamp:"+Timestamp+", Status:"+Status);
Logger.log("Name: "+Name+", Phone:"+Phone+", email:"+Email+", problem:"+Problem);
// send an email using this information
}
}
更新
使用更传统的表单值循环来查找与支持票证的匹配项的比较。
function onEdit(e){
// example of a loop compared to map/indexOf
//so5894534203()
// Spreadsheet#2 containing the IT support logs
var ss = SpreadsheetApp.getActiveSpreadsheet();
var supportsheetname = "support";
var support = ss.getSheetByName(supportsheetname);
// Spreadsheet #1 containing the form responses
var s2id = "1S9CozVBncgDGceqhnIC6bwK15kDAwRrPu9ObooPgKPc";
var s2 = SpreadsheetApp.openById(s2id);
var formsheetname = "Form Responses 1";
var form = s2.getSheetByName(formsheetname);
// get data from forms
var Avals = form.getRange("A1:A").getValues();
var formLR = Avals.filter(String).length;
var formRange = form.getRange(2,1,formLR-1,6);
var formValues = formRange.getValues();
// get the row that was edited by the IT support
var editedrow = e.range.getRow();
var TicketID = support.getRange(editedrow,2).getValue();
// Logger.log("DEBUG: the edited ticket is "+TicketID);
for (var i=0;i<formValues.length;i++){
// Logger.log("DEBUG: i:"+i+", ticket#:"+formValues[i][1])
if(TicketID === formValues[i][1]){
// Logger.log("DEBUG: i:"+i+" = match"); // zero based plus allow for header row
// declare variables
var Status = e.value; // new status value
var Timestamp = formValues[i][0];
var Name = formValues[i][2];
var Phone = formValues[i][3];
var Email = formValues[i][4];
var Problem = formValues[i][5];
Logger.log("Ticket ID:"+TicketID+", Timestamp:"+Timestamp+", Status:"+Status);
Logger.log("Name: "+Name+", Phone:"+Phone+", email:"+Email+", problem:"+Problem);
// send an email using this information
}
}
}
谁能帮帮我。如果我不能正确解释所有内容,我想说声抱歉,因为英语不是我的母语。我正在做的是创建一个 Google 表单。这是例子。
第 1 部分:
Google 表格 1 |电子表格 1:在 google 表格中,输入信息后。电子表格更新每一行。 IT 人员将根据报告修复问题。 IT 人员完成后,他将使用 Google 表格 2。
第二部分:
Google 表格 2 |电子表格 2:IT 人员使用第二个 Google 表格来关闭工单或待定工单。如果 IT 人员提交表格,它会向电子表格 1 中的电子邮件地址发送电子邮件,并说出工单 ID(在电子表格 1 和 2 中找到的列),说工单状态(在电子表格 2 中找到的列),说在电子邮件中报告问题详细信息(在电子表格 1 中找到的列)。怎么办?
这是我编写的代码。
function myFunction(e) {
// declare variables
var Timestamp = e.values[0];
var TicketID = e.values[1];
var Email = e.values[2];
var Status = e.values[3];
var ss = SpreadsheetApp.openById(INSERT SPREADSHEET ID 1 INSIDE);
var DetailsCol = 6; // column number of Report Problem Details from Spreadsheet 1
/* This is the part I not know how to get. I want to compare Ticket ID
from Spreadsheet 1 to Spreadsheet 2, and if they’re same, then it returns the value of
“Report Problem Details” that is associate to the Ticket ID match,
and save it to Spreadsheet 2 column F, then send email with this value.*/
var ss1value = ss.getDataRange().getValues();
for(var i = 0; i<data.length;i++){
if(data[i][1] == TicketID){ //start 0 index
return i+1;
}
}
ss1value.getRange(i, 5).setValue(Report Problem Details);
// Email Send
var Subject = "Ticket Status";
var Message =
'<!DOCTYPE html> ' +
"<html><head>" +
"<table border='1' width='300'>" +
"<tr><td>Case ID</td><td>" + TicketID +
"<tr><td>Status</td><td>" + Status +
"<tr><td>Problem Description</td><td>" + 'Details' +
"</table>" +
MailApp.sendEmail(Email, Subject, "", {htmlBody: Message});
}
您正在使用 Google 表格和 Google 表格构建支持票系统。您在匹配来自两个价差 sheet 的票号时遇到问题。
提供以下脚本是为了简化票证管理,因此不需要 "matching"。有两个脚本:
so5894534201(e)
:应作为可安装的 onFormSubmit 触发器安装。onEdit(e)
: 执行 onEdit 的脚本。
so5894534201(e)
一般的方法是用户提交更新表单响应的表单 sheet。 onFormSubmit 捕获响应并将其添加到 "Support" sheet。它还添加了一个额外的字段 "Status",它为其分配数据验证规则(选项为 "Open"、"Pending" 和 "Closed"),并设置初始值 "Open".
onEdit(e)
这会监视支撑 sheet 上状态的变化。预期的操作是向提交机票的人发送一封电子邮件。我把这个留给你完成。
function so5894534201(e) {
// to be installaed as an Installable onFormSubmit trigger
var ss = SpreadsheetApp.getActiveSpreadsheet();
// reference the sheets
var responsesheetname = "Form Responses 1";
var response = ss.getSheetByName(responsesheetname);
var supportsheetname = "support";
var support = ss.getSheetByName(supportsheetname);
var settingssheetname = "settings";
var settings = ss.getSheetByName(settingssheetname);
// event objects
//Logger.log(JSON.stringify(e)); // DEBUG
// create temporary array to hold response values
var responsedata = [];
responsedata.push(e.values[0]);
responsedata.push(e.values[1]);
responsedata.push(e.values[2]);
responsedata.push(e.values[3]);
responsedata.push(e.values[4]);
responsedata.push(e.values[5]);
// get last row on Support
var Avals = support.getRange("A1:A").getValues();
var supportLR = Avals.filter(String).length;
// Logger.log("DEBUG: the last row in support = "+supportLR)
// get the range to the next support response
var supportRange = support.getRange(supportLR+1,1,1,6);
// Logger.log("DEBUG: the suppport target range = "+supportRange.getA1Notation())
// build status cell on Support
var cell = support.getRange(+supportLR+1,7);
// Logger.log("DEBUG: the status cell range is "+cell.getA1Notation());
// build the data validation rule
var settingsRange = settings.getRange("A2:A4");
var statusrule = SpreadsheetApp.newDataValidation()
.requireValueInRange(settingsRange, true)
.build();
//set the rule
cell.setDataValidation(statusrule);
// Update the initial Status value
cell.setValue("Open");
// Update the support range with the latest response
supportRange.setValues([responsedata]);
}
function onEdit(e){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var supportsheetname = "support";
var support = ss.getSheetByName(supportsheetname);
// get the event objects
//Logger.log(JSON.stringify(e)); // DEBUG
var column = e.range.getColumn();
var sheet = e.range.getSheet().getName();
var newStatus = e.value; // new status value
var oldStatus = e. oldValue // old value
// if column = column 7 (G) && sheet = "support" && newstatus isn't Open (i.e. isn't the new support response
if(column == 7 && sheet == supportsheetname && newStatus != "Open"){
// do stuff
//get the data
var row = e.range.getRow();
var supportdataRange = support.getRange(row,1,1,7);
Logger.log("support data range = "+supportdataRange.getA1Notation());
Logger.log("Edited row = "+row);
var supportdata = supportdataRange.getValues();
var timeStamp = supportdata[0][0];
var ticketNumber = supportdata[0][1];
Logger.log("Error logged:"+timeStamp+", Ticket Number:"+ticketNumber)
var name = supportdata[0][2];
var phone = supportdata[0][3];
var email = supportdata[0][4];
var problem = supportdata[0][5];
Logger.log("Name:"+name+", Phone:"+phone+", Email:"+email+", Problem:"+problem);
// Logger.log("DEBUG: onedit was triggered the old status was "+oldStatus+", and the new status is "+newStatus)
// send an email with this information
}
else
{
// nothing to do because status wasn't chnaged from "Open"
Logger.log("DEBUG: do nothing - status wasn't changed FROM 'Open'")
}
}
支持sheet
设置sheet
您正在使用 Google 表格和 Google 表格构建支持票系统。
- 用户将表格#1 提交给 Spreadsheet#1 - Ticket Number 是唯一值;
- IT 支持回复表单;
- IT 支持通过将表格 #2 提交到 Spreadsheet#2; 来更新他们自己的记录
- 当 IT 支持从 "Open" 以外的其他内容更新状态(在 Spreadsheet#2 上)时,应向用户发送一封电子邮件;
- 由于 Spreadsheet#2 没有 Form Response 中的所有信息,因此需要将唯一的 Ticket Number(来自 Spreadsheet#2)与传播sheet#1 以检索用户名、电子邮件和其他相关数据。
您在匹配两个价差之间的票号时遇到问题sheet。
以下脚本演示了将值与数组匹配的方法。关键方面是:
- 此脚本必须 运行 来自 Spreadsheet#2
onEdit(e)
: 脚本必须在 onEdit 触发器上,以便它检测支持更新状态(此脚本中不包含其逻辑)openById()
:注意 Spreadsheet#1 是如何被访问的var formValues = formRange.getValues();
:从响应中获取所有值 sheetvar formTickets = formValues.map(function(e){return e[1];});
:使用javascript map方法只创建一个临时票号数组var TickedID = support.getRange(editedrow,2).getValue();
:利用 Event Objects 从 Spreadsheet#1 获取票号
var result = formTickets.indexOf(TicketID);// result is zero-based.
:在Form Ticket Numbers数组中查找支持Ticket Number的匹配项;这使用 javascript indexOf 方法。值为 -1 表示不匹配,否则该值为数组中票号的基于 zer0 的索引。var email = formValues[result][4];
:一旦您知道 "result" 值,您就可以从表单值中访问该票证的其余详细信息。
function onEdit(e){
// Spreadsheet#2 containing the IT support logs
var ss = SpreadsheetApp.getActiveSpreadsheet();
var supportsheetname = "support";
var support = ss.getSheetByName(supportsheetname);
// Spreadsheet #1 containing the form responses
var s2id = "<insert spreadsheetID here>";
var s2 = SpreadsheetApp.openById(s2id);
var formsheetname = "Form Responses 1";
var form = s2.getSheetByName(formsheetname);
// get data from forms
var Avals = form.getRange("A1:A").getValues();
var formLR = Avals.filter(String).length;
var formRange = form.getRange(2,1,formLR-1,6);
var formValues = formRange.getValues();
//get the ticket Numbers in a temporary array
var formTickets = formValues.map(function(e){return e[1];});//[[e],[e],[e]]=>[e,e,e]
// Logger.log(formTickets);//DEBUG
// get the row that was edited by the IT support
var editedrow = e.range.getRow();
var TicketID = support.getRange(editedrow,2).getValue();
Logger.log("the Ticket ID is "+TicketID);
// find the ticket number in the responses
var result = formTickets.indexOf(TicketID);// result is zero-based.
if (result != -1){
// Logger.log("DEBUG: the result is "+result); // result is zero-based
// declare variables
var Status = e.value; // new status value
var Timestamp = formValues[result][0];
var Name = formValues[result][2];
var Phone = formValues[result][3];
var Email = formValues[result][4];
var Problem = formValues[result][5];
Logger.log("Ticket ID:"+TicketID+", Timestamp:"+Timestamp+", Status:"+Status);
Logger.log("Name: "+Name+", Phone:"+Phone+", email:"+Email+", problem:"+Problem);
// send an email using this information
}
}
更新
使用更传统的表单值循环来查找与支持票证的匹配项的比较。
function onEdit(e){
// example of a loop compared to map/indexOf
//so5894534203()
// Spreadsheet#2 containing the IT support logs
var ss = SpreadsheetApp.getActiveSpreadsheet();
var supportsheetname = "support";
var support = ss.getSheetByName(supportsheetname);
// Spreadsheet #1 containing the form responses
var s2id = "1S9CozVBncgDGceqhnIC6bwK15kDAwRrPu9ObooPgKPc";
var s2 = SpreadsheetApp.openById(s2id);
var formsheetname = "Form Responses 1";
var form = s2.getSheetByName(formsheetname);
// get data from forms
var Avals = form.getRange("A1:A").getValues();
var formLR = Avals.filter(String).length;
var formRange = form.getRange(2,1,formLR-1,6);
var formValues = formRange.getValues();
// get the row that was edited by the IT support
var editedrow = e.range.getRow();
var TicketID = support.getRange(editedrow,2).getValue();
// Logger.log("DEBUG: the edited ticket is "+TicketID);
for (var i=0;i<formValues.length;i++){
// Logger.log("DEBUG: i:"+i+", ticket#:"+formValues[i][1])
if(TicketID === formValues[i][1]){
// Logger.log("DEBUG: i:"+i+" = match"); // zero based plus allow for header row
// declare variables
var Status = e.value; // new status value
var Timestamp = formValues[i][0];
var Name = formValues[i][2];
var Phone = formValues[i][3];
var Email = formValues[i][4];
var Problem = formValues[i][5];
Logger.log("Ticket ID:"+TicketID+", Timestamp:"+Timestamp+", Status:"+Status);
Logger.log("Name: "+Name+", Phone:"+Phone+", email:"+Email+", problem:"+Problem);
// send an email using this information
}
}
}