【问题标题】:Calculate driving distance in KM when a Form is submitted提交表格时以公里计算行驶距离
【发布时间】:2015-07-13 17:21:04
【问题描述】:

我需要修改下面的脚本,以便在提交表单时,回复电子邮件会指示起点 (partida) 和目的地 (destino) 之间的行驶距离(以公里为单位)。

var docTemplate = "1FteemZEe52j244XldbZnE7qKHNiZFEoKYZK1xNge3Cs";
var docName     = "AUTORIZAÇÃO PARA RETIRADA DE VEÍCULO";

// Create the function
function onFormSubmit(e) { 
//Get the variables
  var email_address = "user@example.com";
  var nome = e.values[2];
  var carro = e.values[3];
  var data = e.values[4];
  var hora = e.values[6];
  var destino = e.values[7];
  var motivo = e.values[5];
  var partida = e.values[8];

// Copy and start temp document
  var copyId = DriveApp.getFileById(docTemplate)
                .makeCopy(docName+' para '+nome)
                .getId();

  var copyDoc = DocumentApp.openById(copyId);

  var copyBody = copyDoc.getActiveSection();

   copyBody.replaceText('keyNome', nome);
   copyBody.replaceText('keyCarro', carro);
   copyBody.replaceText('keyData', data);
   copyBody.replaceText('keyHora', hora);
   copyBody.replaceText('keyDestino', destino);
   copyBody.replaceText('keyMotivo',motivo);

// I need put here the simple calculator for distance in KM from variable partida and variable destino  

// Salve the temp document
   copyDoc.saveAndClose();

// Convert in PDF the temp document and send email

   var pdf = DriveApp.getFileById(copyId).getAs("application/pdf"); 
   var subject = "AUTORIZAÇÃO DE VEÍCULO";
   var body    = "Esta é a autorização do(a) " + nome + "";
   MailApp.sendEmail(email_address, subject, body, {htmlBody: body, attachments: pdf}); 

// Delete the temp document
   DriveApp.getFileById(copyId).setTrashed(true);
}

【问题讨论】:

  • this answer 尝试drivingDistance([partida, destino])

标签: google-apps-script google-forms


【解决方案1】:

Google Apps 脚本Quickstart: Macros, Menus, and Custom Functions 中提供了一个计算行驶距离的函数。 Looking for distance between multiple points in a googlesheets script 中显示了一个接受多个航点的改编版本。

使用其中任何一个功能,您都可以像这样修改您的代码:

...
copyBody.replaceText('keyDestino', destino);
copyBody.replaceText('keyMotivo',motivo);

// Calculate distance in KM from partida to destino
var distancia = drivingDistance(partida, destino) / 1000;
copyBody.replaceText('keyDistancia',distancia);

// Save the temp document
copyDoc.saveAndClose();
...

如果您希望格式化计算,请使用Utilities.formatString()

【讨论】:

  • 对不起,莫格达,我不明白。我必须将代码作为新项目复制并粘贴到我的工作表中吗?我尝试“var distancia =drivingDistance(partida, destino) / 1000;”但我得到一个参考错误。提前致谢!
  • 您需要复制drivingDistance() 函数的代码,以及它需要的任何其他内容,例如getDirections_(),由drivingDistance() 调用。如果您是 JavaScript 和 Google Apps 脚本的新手,您应该先完成快速入门练习以进行练习。
  • 再次非常感谢您,特别是您的耐心等待!我真的是一个新手,但我希望练习和学习快。我会努力工作的!
  • 我去过那里,所以我明白了!我发现Codecademy 的 JavaScript 课程是一个很好的起点,然后转到 Google 的教程和快速启动项目。我建议先打好基础,以免对更艰巨的项目感到沮丧。
【解决方案2】:

我的代码可以正常工作了!它的工作正常! Mogsdad,“você é o cara!”。非常感谢!

// Pega um template do Google Docs e nomeia
var docTemplate = "1FteemZEe52j244XldbZnE7qKHNiZFEoKYZK1xNge3Cs";
var docName     = "AUTORIZAÇÃO PARA RETIRADA DE VEÍCULO";

// Quando o formulário é enviado (lembre-se de acionar uma trigger para que este código funcione)
function onFormSubmit(e) { 
//Pega as informações do formulário e organiza em variáveis. Note que a posição de cada variável depende da coluna da planilha
  var email_address = "user@email.com.br";
  var nome = e.values[2];
  var carro = e.values[3];
  var data = e.values[4];
  var hora = e.values[6];
  var destino = e.values[7];
  var motivo = e.values[5];
  var partida = e.values[8];

// Pela o modelo do documento e faz uma cópia temporária
  var copyId = DriveApp.getFileById(docTemplate)
                .makeCopy(docName+' para '+nome)
                .getId();
// Inicializa o documento temporário
  var copyDoc = DocumentApp.openById(copyId);
// Pega o corpo do documento
  var copyBody = copyDoc.getActiveSection();

// Troca pelas palavras chaves do documento cada variável
   copyBody.replaceText('keyNome', nome);
   copyBody.replaceText('keyCarro', carro);
   copyBody.replaceText('keyData', data);
   copyBody.replaceText('keyHora', hora);
   copyBody.replaceText('keyDestino', destino);
   copyBody.replaceText('keyMotivo',motivo);

// Obtem a localização e calcula a distancia em Km por carro entre o ponto de partida e destino  
  function getDirections_(partida, destino) {
  var directionFinder = Maps.newDirectionFinder();
  directionFinder.setOrigin(partida);
  directionFinder.setDestination(destino);
  var directions = directionFinder.getDirections();
  if (directions.routes.length == 0) {
    throw 'Não foi possível calcular a distancia entre esses endereços.';
  }
  return directions;
  }
  function drivingDistance(partida, destino) {
  var directions = getDirections_(partida, destino);
  return directions.routes[0].legs[0].distance.value;
  }

  var distancia = drivingDistance(partida, destino) / 1000;
// Salva e fecha o documento temporário
   copyDoc.saveAndClose();

// Converte o documento temporário em arquivo PDF
   var pdf = DriveApp.getFileById(copyId).getAs("application/pdf"); 

// Anexa o PDF e envia por email
   var subject = "AUTORIZAÇÃO DE VEÍCULO";
  var body    = "Esta é a autorização do(a) " + nome + ". O total de kilometros é: " + distancia;
   MailApp.sendEmail(email_address, subject, body, {htmlBody: body, attachments: pdf}); 

// Deleta o documento temporário
   DriveApp.getFileById(copyId).setTrashed(true);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 2019-05-05
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多