提交表单时,以KM为单位计算行车距离

时间:2015-07-13 17:21:04

标签: google-apps-script google-form

我需要调整下面的脚本,以便在提交表单时,回复电子邮件会以千米为单位显示原点(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);
}

2 个答案:

答案 0 :(得分:0)

计算驾驶距离的功能在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()

答案 1 :(得分:0)

我的代码功能正常!它的工作正常! Mogsdad,“vocêéocara!”。非常感谢!

// 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);
}