본문 바로가기
낙서장/chatGPT

chatGPT가 알려주는 구글 폼 데이터 삭제하기

by 댕기사랑 2023. 9. 15.

구글 폼은 외부인에게 설문지를 만들어서 정보를 수집하는 유용한 툴이다.  그런데 일정 기간 데이터를 관리하다가 삭제해야 하는 경우 일일이 들어가서 삭제해야 하는 번거로움이 있다.  구글 스프레드 시트에 연동하여 시트에서 지워도 되지만 최초 입력받은 폼에는 그대로 데이터가 남아 있다고 한다.

이에 오늘 chatGPT가 알려주는 구글 폼 데이터 삭제하는 법에 대해 설명하고자 한다. 

먼저 폼을 만들고 데이터를 쌓고 구글 스프레드 시트에 연동한다. (본 포스팅의 목적은 앱스크립트 공유라 생략합니다.)

 

이제 chatGPT에 물어봅니다 .

폼 이름이 formaaaa이고  ForID가  formid1one 이고, 스프레드시트 ID가 spsheetdata1이고 저장된 시트가 "설문지 응답 시트1"라 하면 구글 폼데이터와  구글 스프레드시트 데이터 삭제하는 앱스스크립트 작성해주세요. 
삭제기준은  9월 15일 9시 21분으로 9시 21분 이전 데이터는 삭제되어야 합니다. 
그리고 삭제한 결과를 메일로 보내주시고 삭제한 데이터가 없다면 없다고 결과 메일 보내주세요. 

 

 

아래는 구글 폼 데이터와 구글 스프레드시트 데이터를 삭제하는 스크립트입니다. 삭제 기준은 9월 15일 9시 21분 이전 데이터를 삭제하며, 삭제 결과를 메일로 보내고 삭제한 데이터가 없는 경우에도 결과 메일을 보내는 스크립트입니다. 폼 이름은 "formaaaa," Form ID는 "formid1one," 스프레드시트 ID는 "spsheetdata1," 시트 이름은 "설문지 응답 시트1"로 가정합니다.

javascript
Copy code
function deleteFormAndSpreadsheetData() {
  var formId = "formid1one"; // Google Forms 폼 ID를 업데이트하세요
  var spreadsheetId = "spsheetdata1"; // Google 스프레드시트 ID를 업데이트하세요
  var sheetName = "설문지 응답 시트1"; // 스프레드시트의 시트 이름을 업데이트하세요
  var deletionDate = new Date("2023-09-15T09:21:00"); // 삭제 기준 날짜 및 시간을 업데이트하세요
  
  // Google Forms 응답 데이터 삭제
  var form = FormApp.openById(formId);
  var formResponses = form.getResponses();
  var deletedFormResponsesCount = 0;
  
  for (var i = 0; i < formResponses.length; i++) {
    var response = formResponses[i];
    var responseDate = response.getTimestamp();
    
 // 폼 응답 날짜와 삭제 기준 날짜 비교하여 삭제
    if (responseDate < deletionDate) {
      var responseId = response.getId(); // 응답 ID 가져오기
      form.deleteResponse(responseId); // 응답 삭제
      deletedFormResponsesCount++;
    }
  }
  
  // Google 스프레드시트에서 응답 데이터 삭제
  var spreadsheet = SpreadsheetApp.openById(spreadsheetId);
  var sheet = spreadsheet.getSheetByName(sheetName);
  var data = sheet.getDataRange().getValues();
  var deletedSpreadsheetRowCount = 0;
  
  for (var i = data.length - 1; i >= 0; i--) {
    var dateInColumnA = data[i][0]; // A열의 데이터 (가정)
    
    // A열의 데이터가 삭제 기준 날짜 이전인 경우 해당 행의 데이터 삭제
    if (dateInColumnA !== "" && dateInColumnA < deletionDate) {
      sheet.deleteRow(i + 1);
      deletedSpreadsheetRowCount++;
    }
  }

  // 작업을 수행한 날짜를 형식화
  var formattedDate = Utilities.formatDate(new Date(), "GMT+9", "yyyy-MM-dd HH:mm");
  
  // 이메일 주소를 정의
  var emailAddresses = ["recipient1@example.com", "recipient2@example.com"]; // 이메일 주소 배열에 업데이트하세요.

  // 이메일 보내기
  var subject = formattedDate + " - 응답 데이터 및 스프레드시트 데이터 삭제 결과";
  var message = "Google Forms 응답 데이터 " + deletedFormResponsesCount + "건과 스프레드시트 데이터 " + deletedSpreadsheetRowCount + "건이 삭제되었습니다.";
  
  if (deletedFormResponsesCount === 0 && deletedSpreadsheetRowCount === 0) {
    message = "삭제할 데이터가 없습니다.";
  }
  
  MailApp.sendEmail(emailAddresses.join(','), subject, message);
}
이제 이 스크립트를 사용하여 구글 폼 데이터와 구글 스프레드시트 데이터를 삭제하고 삭제 결과를 이메일로 받을 수 있습니다. 필요에 따라 스크립트를 수정하고 테스트하여 사용하십시오.

 

폼의 앱스크리트로 이동한다.(우측 점 3개 누른 후 "스크립트 편집기" 선택 )

 

앱스크립트 창에 소스를 붙여넣고 이름을 부여한다. (<>  누른 후  소스 붙여놓고 이름 부여하기)

 

실행을 선택하면 저장후 "승인 필요"팝업이 나오는 데 "권한 검토"를 선택한다.

 

계정을 선택하고 "액세서"에 대해 "허용" 한다.

 

실행 로그에 따르면 실행 되었다고 한다. 예상되는 결과는 첫줄 삭제되었을 것이고 메일이 왔을 것이다. 

그런데 삭제가 안되었네 

메일도 수신했는데 없다고 한다. 

 

앗 왜 없지.  날짜가 오전 9시구나

시간 수정하고  데이터 확인한다. 15건임

 

실행하니 삭제 되었다. 

 

댓글