Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 比较电子表格1和电子表格2,然后发送电子邮件解决问题_Google Apps Script_Google Forms - Fatal编程技术网

Google apps script 比较电子表格1和电子表格2,然后发送电子邮件解决问题

Google apps script 比较电子表格1和电子表格2,然后发送电子邮件解决问题,google-apps-script,google-forms,Google Apps Script,Google Forms,谁能帮我。我想说对不起,如果我不能正确解释一切,因为英语不是我的第一语言。我正在做的是创建一个谷歌表单。这就是例子 第一部分: 谷歌表格1 |电子表格1:在谷歌表格中,一旦输入信息。电子表格更新了每一行。IT人员将根据报告解决问题。一旦IT人员完成,他将使用谷歌表单2 第二部分: 谷歌表单2 |电子表格2:IT人员使用第二个谷歌表单关闭票据或待决票据。如果IT人员提交表单,则会向电子表格1中的电子邮件地址发送一封电子邮件,并在电子邮件消息中显示工单ID(电子表格1和2中的列)、工单状态(电子表

谁能帮我。我想说对不起,如果我不能正确解释一切,因为英语不是我的第一语言。我正在做的是创建一个谷歌表单。这就是例子

第一部分:

谷歌表格1 |电子表格1:在谷歌表格中,一旦输入信息。电子表格更新了每一行。IT人员将根据报告解决问题。一旦IT人员完成,他将使用谷歌表单2

第二部分:

谷歌表单2 |电子表格2:IT人员使用第二个谷歌表单关闭票据或待决票据。如果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});

}
函数myFunction(e){
//声明变量
var Timestamp=e.values[0];
var TicketID=e.值[1];
var Email=e.values[2];
var状态=e.值[3];
var ss=电子表格应用程序.openById(在内部插入电子表格ID 1);
var DetailsCol=6;//电子表格1中报告问题详细信息的列号
/*这是我不知道如何得到的部分。我想比较机票ID
从电子表格1到电子表格2,如果它们相同,则返回
与票证ID匹配关联的“报告问题详细信息”,
并将其保存到电子表格2的F列,然后发送带有此值的电子邮件*/
var ss1value=ss.getDataRange().getValues();

对于(var i=0;i您正在使用谷歌表单和谷歌表单构建支持票证系统。您在匹配两个电子表格中的票证号时遇到问题

提供以下脚本以简化票证管理,从而不需要“匹配”。有两个脚本:

  • so5894534201(e)
    :应作为可安装的onFormSubmit触发器安装
  • onEdit(e)
    :带有的脚本执行onEdit
so5894534201(e)

一般的方法是用户提交表单以更新表单响应表。onFormSubmit捕获响应并将其添加到“支持”表中。它还添加一个额外的字段“状态”,为其分配数据验证规则(选项为“打开”、“挂起”和“关闭”),并设置初始值“打开”

onEdit(e)

这将监视支持表上状态的更改。预期的操作是向提交票据的人发送电子邮件。我已将此留给您完成



支持表


设置表


您正在使用谷歌表单和谷歌表单构建支持票证系统

  • 用户将表格#1提交至电子表格#1-票号为唯一值
  • IT支持响应表单
  • IT支持通过向电子表格2提交表格2来更新自己的记录
  • 当它支持从“打开”以外的内容更新状态(在电子表格#2上)时,应向用户发送电子邮件
  • 由于电子表格#2没有表单响应中的所有信息,因此有必要将唯一票号(来自电子表格#2)与电子表格#1上的票号匹配,以便检索yser名称、电子邮件和其他相关数据
您在两个电子表格之间匹配票证号码时遇到问题

以下脚本演示了将值与数组匹配的方法。关键方面包括:

  • 此脚本必须从电子表格2运行
  • onEdit(e)
    :脚本必须在onEdit触发器上,以便它检测到更新状态的支持(此脚本中不包括该支持的逻辑)
  • openById()
    :注意如何访问电子表格#1
  • var formValues=formRange.getValues();
    :从响应表中获取所有值
  • var formTickets=formValues.map(函数(e){returne e[1];});
    :使用javascript方法仅创建票号的临时数组
  • var TickedID=support.getRange(editedrow,2).getValue();
    :利用
  • var result=formTickets.indexOf(TicketID);//结果是零基的。
    :在表单票证号数组中查找支持票证号的匹配项;这使用javascript方法。值-1表示不匹配,否则该值是数组中票证号的基于zer0的索引
  • var email=formValues[result][4];
    :一旦知道“result”值,就可以从表单值访问该票据的其余详细信息

函数onEdit(e){
//包含IT支持日志的电子表格2
var ss=SpreadsheetApp.getActiveSpreadsheet();
var supportsheetname=“支持”;
var support=ss.getSheetByName(supportsheetname);
//包含表单响应的电子表格#1
var s2id=“”;
var s2=电子表格应用程序openById(s2id);
var formsheetname=“表单响应1”;
var form=s2.getSheetByName(formsheetname);
//从表单获取数据
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();
//在临时数组中获取票证编号
var formTickets=formValues.map(函数(e){returne e[1];});//[[e],[e]]=>[e,e,e]
//Logger.log(formTickets);//调试
//获取由IT支持部门编辑的行
var editedrow=e.range.getRow();
var TicketID=support.getRange(editedrow,2.getValue();
Logger.log(“票证ID为”+TicketID);
//在响应中查找票号
var结果=对于
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'")

  }
}
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

    }

  }

}