inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Tự động hóa tác vụ bắt đầu với Google Apps Script

Xử lý dữ liệu và gửi email

완성된 코드를 공유해 주실 수 있으신가요?

328

jeongwoohan9550

1 câu hỏi đã được viết

0

안녕하세요, 강의 잘 듣고 있습니다.

혼자 하려고 하니, 코드 오류가 일어나거나 이메일 본문과 첨부파일이 분리되어 오는데,완성된 코드를 공유해 주실 수 있으신가요?

제가 작성한 코드와 비교해 보고 싶습니다.

 

slack google-sheets Google Apps Script

Câu trả lời 1

0

totuworld

안녕하세요 정우님.

신규 입사자 코드 첨부합니다.

function myFunction() {
  const sheets = SpreadsheetApp.getActiveSpreadsheet();
  const list = sheets.getSheetByName('list');

  const lastRowNo = list.getLastRow();

  const folderId = '폴더 ID';
  const folder = DriveApp.getFolderById(folderId);
  const files = folder.getFiles();
  const fileMap = new Map();
  const inlineImages = {};
  while (files.hasNext()) {
    let file = files.next();
    const flieName = file.getName();
    fileMap.set(flieName, file);
    inlineImages[flieName] = file;
  }

  const imageFile = DriveApp.getFileById('파일 ID');
  inlineImages['megaphone'] = imageFile;

  let allMembers = [];
  for (let i = 2; i < lastRowNo + 1; i++) {
    const name = list.getRange(i, 1).getValue();
    const division = list.getRange(i, 2).getValue();
    const department = list.getRange(i, 3).getValue();
    const team = list.getRange(i, 4).getValue();
    const link = list.getRange(i, 5).getValue();
    const profile = list.getRange(i, 6).getValue();
    let memberInfo = { name, division, department, team, link };
    if (fileMap.has(profile) === true) {
      memberInfo.img = `cid:${profile}`;
    }
    allMembers.push(memberInfo);
  }

  const reduceMembers = allMembers.reduce((acc, cur)=> {
    const index = acc.findIndex(f => f.division === cur.division);
    if (index === -1) {
      // 기존에 없는 부문이므로 새로 추가
      const newDivision = {
        division: cur.division,
        members: [{...cur}],
      }
      return [...acc, newDivision];
    }
    // 이미 있는 부분
    const prevData = {...acc[index]};
    prevData.members.push({...cur});
    const updateArr = [...acc];
    updateArr[index] = prevData;
    return updateArr;
  }, []);

  const htmlFile = HtmlService.createTemplateFromFile('email');
  htmlFile.data = reduceMembers;
  const htmlBody = htmlFile.evaluate().getContent();

  MailApp.sendEmail({
    to: '본인 이메일 주소',
    subject: '신규입사자 소개합니다',
    htmlBody,
    inlineImages,
  });
}





0

jeongwoohan9550

감사합니다.

실행 시 아래와 같은 오류가 뜨는데 혹시 어떤 문제일까요?

Exception: Unexpected error while getting the method or property sendEmail on object MailApp.

myFunction

@ Code.gs:59

image

0

totuworld

MailApp에 전달되는 object 를 로그로 찍어보시면 좋겠네요.


// 이 부분을 아래처럼 변경해보세요.
  MailApp.sendEmail({
    to: '본인 이메일 주소',
    subject: '신규입사자 소개합니다',
    htmlBody,
    inlineImages,
  });

// 변경된 코드
  const mailObj = {
    to: '본인 이메일 주소',
    subject: '신규입사자 소개합니다',
    htmlBody,
    inlineImages,
  };
  console.log(mailObj);
  MailApp.sendEmail(mailObj);

 

이렇게 실행했을 때 mailObj 로그가 찍히는것부터 봐보세요.

데이터가 잘못되었을 수 있어요.

 

최종 과제 제출

0

82

3

섹션2 강의들이 하얀 화면만 나오고 영상이 보이지 않아요.

0

74

1

ga4/gtm 티스토리 연동 디버깅

0

53

1

마케터를 위한 즐겨찾기/북마크 구글 sheet 링크는 어디서 확인해야 할까요?

0

60

2

BigQuery 활용편 18강 질문있습니다!

0

84

1

리텐션 공부하다가 궁금한게 생겨 질문드립니다

0

83

2

안녕하세요 강사님 코호트 쿼리 공부하다가 의문점이 생겨서 문의드립니다

0

75

2

biquery 테이블 생성 오류 이슈

0

55

2

광고 입찰가 관련 질문

0

64

2

입찰전략과 과금방식의 차이

0

76

1

구글애즈 타겟팅 제외설정

1

78

2

구글애즈 검색광고

0

76

2

동일하게 쿼리를 작성했는데 화면과 다른 값이 나옵니다

0

74

2

utm ga4 실시간 반영

0

59

2

트리거유형

0

56

2

실습파일

0

58

2

구글 시트 링크

0

42

1

강의 최신화

0

41

1

array 등

0

63

2

스프레드시트 협업 시 효율적인 관리 노하우가 있을까요?

0

87

1

N day 리텐션 쿼리 관련 질문

0

63

2

이동평균 계산 시 order by 기본값은 뭔가요?

0

69

2

윈도우 연습문제 1번 질문

0

65

1

예제 및 실습 시트가 일치하지 않습니다

0

64

2