8

Google 스프레드 시트에서 다음과 같은 작업을 수행하고 있습니다.Google 스프레드 시트에서 값이 변경되면 이메일을 보냅니다.

  1. 셀에서 값이 변경되면 이메일을 보냅니다. (값 = 완료).
  2. 데이터를 전자 메일에 컴파일하십시오. 아래 코드에서 형식을 참조하십시오.
  3. 정보를 확인하는 메시지가 표시됩니다.
  4. 예인 경우 아래 코드의 활성 사용자와 미리 설정된 사용자에게 전자 메일을 보내십시오.
  5. 이것은 선택 사항입니다. 열 (P)의 행을 16 행으로 전자 메일 전송 + 타임 스탬프로 업데이트하십시오.

안녕 방탄복,

시도는 사용자가 제공 한 코드를 구현하는,하지만 난 다 무슨 필요에 맞게 수정하는 작업에 머리 또는 꼬리를 만들 수 없습니다.

워크 플로를 다시 설명하겠습니다. 열 K.

부분의 샘플 코드의 값이 변경 열 K

var sheetNameToWatch = "Active Discs"; 
var columnNumberToWatch = 14; // column A = 1, B = 2, etc. 
var valueToWatch1 = "Completed"; 
var valueToWatch2 = "in progress"; 

try{ 
var ss = e.source; 
var sheet = ss.getActiveSheet(); 
var range = e.range; 

if (sheet.getName() == sheetNameToWatch && range.columnStart == 
columnNumberToWatch && e.value == valueToWatch) 

var confirm = Browser.msgBox 
('Email will be sent Team X. Do you want to sent this email?', Browser.Buttons.YES_NO); 
if(confirm!='yes'){return}; 
// if user click NO then exit the function, else move data 

이 이메일은 특정 행의 지정된 값을 포함합니다 볼 때

이메일을 보냅니다. 전의. 열 A, B, C, D, E, F, G, H, I의 값 J.

//Email to be sent if **Inprogess** value is a match: 

Var sendEmailTeamA(){ 

var ProjectName = e.values[0]; 
var ProjectId = e.values[1]; 
var ProjectManager = e.values[3]; 
var Sales = e.values[4]; 
var Client = e.values[5]; 
var DiscType = e.values[6]; 
var DVDFlash = e.values[7]; 
var Phase = e.values[8]; 
var Encryption = e.values[9]; 
var Qty = e.values[11]; 
var DueDate = e.values[12]; 
var SpecialInstructions = e.values[13]; 
var emailAddress = ''; 
var subject = "DVD Request - " + ProjectName + " " + ProjectId; 
var emailBody = "Hi Venue Colombo Team," 
    "\n\nThe following data room(s) will need a disc creation. Please begin bulk save data room and create ISO to upload to the FTP site: " + 
    "\nProject Name: " + ProjectName + 
    "\nProject ID: " + ProjectId + 
    "\nProject Manager: " + ProjectManager + 
    "\nPhase: " + Phase + 
    "\nDisc Type: " + DiscType + 
    "\nEncryption: " + Encryption + 
    "\nQuantity: " + Qty + 
    "\nClient Due Date: " + DueDate + 
    "\nSpecialInstructions: " + SpecialInstructions; 
var htmlBody = "Thank you for your <b>Club Ambassador Program</b> report submitted on <i>" + timestamp + 
    "</i><br/>&nbsp;<br/>Person Show Submitted this email: " + 
    "<br/><font color=\"red\">Your Name:</font> " + activeSessionuser + 
    "<br/>Your Email: " + toAddress; 
var optAdvancedArgs = {name: "Club Ambassador Program", htmlBody: htmlBody}; 
MailApp.sendEmail(emailAddress, subject, emailBody, optAdvancedArgs); 
} 

//Email to be sent if **“Completed”** value is a match: 

Var sendEmailTeamB() { 

var ProjectName = e.values[0]; 
var ProjectId = e.values[1]; 
var ProjectManager = e.values[3]; 
var Sales = e.values[4]; 
var Client = e.values[5]; 
var DiscType = e.values[6]; 
var DVDFlash = e.values[7]; 
var Phase = e.values[8]; 
var Encryption = e.values[9]; 
var Qty = e.values[11]; 
var DueDate = e.values[12]; 
var SpecialInstructions = e.values[13]; 
var emailAddress = ''; 
var subject = "DVD Request - " + ProjectName + " " + ProjectId; 
var emailBody = "Hi Venue Colombo Team," 
    "\n\nThe following data room(s) will need a disc creation. Please begin bulk save data room and create ISO to upload to the FTP site: " + 
    "\nProject Name: " + ProjectName + 
    "\nProject ID: " + ProjectId + 
    "\nProject Manager: " + ProjectManager + 
    "\nPhase: " + Phase + 
    "\nDisc Type: " + DiscType + 
    "\nEncryption: " + Encryption + 
    "\nQuantity: " + Qty + 
    "\nClient Due Date: " + DueDate + 
    "\nSpecialInstructions: " + SpecialInstructions; 
var htmlBody = "Thank you for your <b>Club Ambassador Program</b> report submitted on <i>" + timestamp + 
    "</i><br/>&nbsp;<br/>Person Show Submitted this email: " + 
    "<br/><font color=\"red\">Your Name:</font> " + activeSessionuser + 
    "<br/>Your Email: " + toAddress; 
var optAdvancedArgs = {name: "Club Ambassador Program", htmlBody: htmlBody}; 
MailApp.sendEmail(emailAddress, subject, emailBody, optAdvancedArgs); 
} 

은 컬럼에 적용이 흐름은 K가 L은 M이 N은, O. 이메일이 전송 될 코드의 미리 설정된 이메일 주소로 이것으로 조금 더 나아 졌으면 좋겠습니다. 시간과 도움을 주셔서 다시 한 번 감사드립니다. 내가 얻을 수

+0

나는 완전한 코드를 제공하고 싶지만 그 결과를 테스트하기 위해 스프레드 시트를 처음부터 새로 만들려면 너무 많은 작업을해야한다. 아마도 SS를 공유 할 수 있을까? 코드를 테스트 할 수 있습니까? –

+0

실제 테스트 시트입니다. https://docs.google.com/spreadsheet/ccc?key=0Ag8NytPhOo00dER6WG1PQ3g3V1hCbnVUaTJUZDFZenc&usp=sharing – WallyG

+0

일요일에 온라인으로 다시 연락하여 문제를 해결해 드리겠습니다. – WallyG

답변

1

당신은 시작 :

  1. 는 "편집의"sendEmail를 트리거 리소스> 현재 프로젝트의 트리거()에 트리거를 추가합니다.
  2. 은 ...
+0

제안 해 주셔서 감사합니다. 나는 onedit을 트리거로 설정 하겠지만 코드가 내가 원하는대로 정확한지 확인해야합니다. – WallyG

0

난 그냥 그런 종류의를 수행하는 스크립트를 작성하지만 난 그게 시트의 모든 변화에 눈을 유지하지만, 스팸 방지하기 위해 한 번만 매 시간마다 메시지를 보내 싶어 내 사서함.

스크립트에는 변경 사항을 수집하여 텍스트 형식으로 저장하는 기능과 최근 1 시간 동안 변경된 사항이 있으면 이메일을 보내는 기능이 있습니다.

첫 번째 함수는 grabData이라고하고,은 onEdit 설치 트리거에 의해 트리거되어야하며, 다음과 같이 진행됩니다

다른 기능은, 나는 매 시간마다 화재를 타이머 트리거 설정 한하지만 당신은 변경할 수 있습니다
function grabData(e){ 
    Logger.log(JSON.stringify(e)); 
    var cell = e.range.getA1Notation(); 
    var user = e.user.email; 
    var time = Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'dd-MM-yyyy')+' à '+Utilities.formatDate(new Date(),Session.getScriptTimeZone(),'hh:mm');; 
    if(user!='email[email protected]'&&cell!='A1'){ 
    var dataUser1 = PropertiesService.getScriptProperties().getProperty('contentUser1'); 
    if(dataUser1==null){dataUser1=''}; 
    dataUser1+='\nCellule '+cell+' modifiée le '+time+' par '+user+' (nouvelle valeur = '+e.range.getValue()+')'; 
    PropertiesService.getScriptProperties().setProperty('contentUser1',dataUser1); 
    } 
    if(user!='[email protected]'&&cell!='A1'){ 
    var dataUser2 = PropertiesService.getScriptProperties().getProperty('contentUser2'); 
    if(dataUser2==null){dataUser2=''}; 
    dataUser2+='\nCellule '+cell+' modifiée le '+time+' par '+user+' (nouvelle valeur = '+e.range.getValue()+')'; 
    PropertiesService.getScriptProperties().setProperty('contentUser2',dataUser2); 
} 
} 

그것은 당신에게 가장 잘 맞습니다.

function sendReport(){ 
    var dataUser1 = PropertiesService.getScriptProperties().getProperty('contentUser1'); 
    var dataUser2 = PropertiesService.getScriptProperties().getProperty('contentUser2'); 
    if(dataUser1.length>1){ 
    MailApp.sendEmail('[email protected]', 'Modification dans le planning FFE', dataUser1); 
    PropertiesService.getScriptProperties().setProperty('contentUser1',''); 
    } 
    if(dataUser2.length>1){ 
    MailApp.sendEmail('[email protected]', 'Modification dans le planning FFE', dataUser2); 
    PropertiesService.getScriptProperties().setProperty('contentUser2',''); 
    } 
} 

메일이 전송 된 후 저장된 데이터가 삭제됩니다. 변경 사항이 기록되지 않은 경우 메일이 전송되지 않습니다.

나는 2 명의 다른 사용자와 2 개의 다른 저장 공간을 가지고있어 각각이 자신의 수정을 통보받지 않고 다른 사용자가 무엇을하는지 볼 수 있습니다.

두 기능 모두 설치 가능한 트리거를 사용하기 때문에 계정에서 실행되므로 타이머를 매우 짧은 기간으로 설정하면 할당량이 폭발하지 않도록주의하십시오.

+0

서지 감사합니다. 나는 오늘 밤에 이것을 시험 할 것이다. 지금 일하다. 나는 문제가 있거나 답을 확인하는 질문에 대답 할 것입니다. – WallyG

+0

안녕 Serge, 나는 방금 내가 뭘 찾고 있는지에 관해 더 나은 설명을하기 위해 초기 질문을 편집했다. – WallyG

관련 문제