114회
구글시트, 업무 자동화 특별 스터디 (3강) | 크롤링 100% 자동화 함수 만들기😎
강의노트
커리큘럼
댓글(0)
'오빠두엑셀'의 모든 Live 강의를
월 990원에 자유롭게 수강하세요!
'위캔두 멤버쉽' 가입하기
강의 자료
  • [라이브강의] 구글시트 Apps Script 기초 5주 특별 스터디 - 3강
    PPT자료
완성파일은 영상 하단 댓글 링크를 확인해주세요.
라이브 미션
  1. 사전미션 ① : 학생 점수를 등급(A-F)로 변환하는 함수
    /**
     * 학생의 성적을 A-F 등급으로 계산합니다.
     * 
     * @param score 성적을 입력합니다.
     * @customfunction
     */
    function getGrade(score) {
     
      var grade ="";
     
      /* if (점수조건) {
        grade = ...;
      } else if () {
        grade = ..;
      } else () {
        grade = ..;
      }
      */
     
    }
보충 자료

📌 Apps Script 자동화 스터디 (3일차) - 예제 파일 및 코드

/**
 * 범위 내 각 단어를 구분자로 병합합니다.
 * 
 * @param delimiter 단어를 병합할 구분자입니다.
 * @param data 병합할 단어가 입력된 범위입니다.
 * @customfunction
 */
function myTextJoin(delimiter,data) {
 
  var result = "";
 
  /* 
  for 반복문 기본문법
  for (var row = 0; row <= 마지막값; row++) {
    var 값 = 배열[row][col];
  }
  */
 
 
 
 
  /* 단어의 마지막 글자를 자르는 구분 substring(시작위치,마지막위치)
  단어.substring(시작위치,끝위치)
  */
 
 
  /** 
    Array의 forEach 문을 사용하는 방법도 있습니다!
    ① Row를 하나씩 돌아가며 Loop
    data.forEach(function(row) {
      Logger.log(row[i])
    });
 
    ② 각 항목을 하나씩 돌아가며 Loop
    data.forEach(function(row) {
      row.forEach(function(col) {
        Logger.log(col);
      });
    });
 
    ★주의! Apps Script V8 스크립트 이후, For Each 문이 For 문으로 변경되었습니다.
    for Each 대신, for (var key in obj) 구문으로 사용합니다.
    자세한 설명은 아래 링크 참고!
    https://developers.google.com/apps-script/guides/v8-runtime/migration#avoid_for_eachvariable_in_object
    */
 
}
 
/**
 * 네이버 연관검색어 목록을 반환합니다.
 * 
 * @param value 연관검색어를 검색할 단어입니다.
 * @customfunction
 */
function getNaverSearch(value) {
  /* 
  네이버 연관검색어 조회 URL
  https://ac.search.naver.com/nx/ac?q=검색단어&frm=nv&st=100
  */
 
  /*
  Javascript 웹 크롤링 기본 문법
  var response = UrlFetchApp.fetch(url);
  var webContent = response.getContentText();
  var jsonData = JSON.parse(webContent); 
  */
 
 
 
  /**
  간혹, 언어 인코딩이 EUC-KR일 경우 한글이 깨지는 문제가 있어요!
  그럴 땐, 아래와 같이 설정을 추가하면 됩니다.
  var fetchOption = {"content-type": "text/html;charset=EUC-KR"};
  var response = UrlFetchApp.fetch(URL, fetchOption);
  var webContent = response.getContentText("EUC-KR");
  */
 
 
  /*
  배열의 모든 값을 한 문장으로 합치기
  Array.join(구분자);
  구분자 생략 시, 쉼표(,)로 연결합니다.
  */
 
}

✅ Apps Script 자동화 스터디 (3일차) - 강의 완성 코드

/**
 * 학생의 성적을 A-F 등급으로 계산합니다.
 * 
 * @param score 성적을 입력합니다.
 * @customfunction
 */
function getGrade(score) {
 
  var grade ="";
 
  if (score == 90) {
    grade = "A";
  } else if (score >= 80) {
    grade = "B";
  } else if (score >= 70) {
    grade = "C";
  } else if (score >= 60) {
    grade = "D";
  } else {
    grade= "F";
  } 
 
  return grade;
 
  /* if (점수조건) {
    grade = ...;
  } else if () {
    grade = ..;
  } else () {
    grade = ..;
  }
  */
 
}
 
function arrayTest() {
 
  var app = SpreadsheetApp;
  var activeSheet = app.getActiveSheet();
 
  var rng = activeSheet.getRange("A1:B9");
 
  Logger.log(rng.getValues());
 
}
 
/**    ---- Apps Script ---
 *       배열[0]     -> [학생명, 점수]
 *       배열[0][0]  -> 학생명
 *       배열[2][1]  -> 76.0
 * 
 * [   [학생명, 점수], 
 *    [이은지, 82.0], 
 *    [김하늘, 76.0], 
 *    [박진성, 52.0], 
 *     [최수종, 95.0],
 *      [김아라, 77.0],
 *      [정수빈, 62.0],
 *      [황현성, 81.0], 
 *     [이현우, 92.0]       ]
 * 
 */
 
/**   ---- VBA -----
 *     배열(0,0)
 * [   학생명, 점수 ;
 *    이은지, 82.0 ; 
 *    김하늘, 76.0; 
 *    박진성, 52.0;
 *     최수종, 95.0;
 *      김아라, 77.0;
 *      정수빈, 62.0;
 *      황현성, 81.0; 
 *     이현우, 92.0       ]
 * 
 */
 
 
function runningTotal() {
 
  var result = 0;
  for (var i = 1; i <=10; i+=2) {
      result += i;
      Logger.log(result);
  }
 
  /**
   * For i = 1 to 10
   *      i ~~
   * Next
   */
 
}
 
 
/**
 * 범위 내 각 단어를 구분자로 병합합니다.
 * 
 * @param delimiter 단어를 병합할 구분자입니다.
 * @param data 병합할 단어가 입력된 범위입니다.
 * @customfunction
 */
function myTextJoin(delimiter,data) {
 
  var result = "";
 
  /** 
   *    <---- data --->
   * 
   * [  [제품명,가격] 
   *    [햄버거, 5000]
   *    [피자, 8000]
   *    ....
   *    [김치찌개,5500]  ]
   * 
   */
 
  for (var i = 0; i <= data.length -1; i++) { var d = data[i]; /** * i = 0 일 때, * d = [제품명, 가격] * * i = 1 * d = [햄버거, 5000] */ //result = result + d[0] + delimiter; //result += d[0] + delimiter; if (d[0].length > 0) { 
      result += d[0] + delimiter ;
      // result = 결과1,결과2,결과3,,,,결과10,  <- 쉼표 제거 } } //문장.substring(시작위치, 종료위치) -> 문장 반환
  result = result.substring(0,result.length-delimiter.length);
 
  return result;
 
  /* 
  for 반복문 기본문법
  for (var row = 0; row <= 마지막값; row++) {
    var 값 = 배열[row][col];
  }
  */
 
 
  /* 단어의 마지막 글자를 자르는 구분 substring(시작위치,마지막위치)
  단어.substring(시작위치,끝위치)
  */
 
 
  /** 
    Array의 forEach 문을 사용하는 방법도 있습니다!
    ① Row를 하나씩 돌아가며 Loop
    data.forEach(function(row) {
      Logger.log(row[i])
    });
 
    ② 각 항목을 하나씩 돌아가며 Loop
    data.forEach(function(row) {
      row.forEach(function(col) {
        Logger.log(col);
      });
    });
 
    ★주의! Apps Script V8 스크립트 이후, For Each 문이 For 문으로 변경되었습니다.
    for Each 대신, for (var key in obj) 구문으로 사용합니다.
    자세한 설명은 아래 링크 참고!
    https://developers.google.com/apps-script/guides/v8-runtime/migration#avoid_for_eachvariable_in_object
    */
 
}
 
/**
 * 네이버 연관검색어 목록을 반환합니다.
 * 
 * @param value 연관검색어를 검색할 단어입니다.
 * @customfunction
 */
function getNaverSearch(value) {
  /* 
  네이버 연관검색어 조회 URL
  https://ac.search.naver.com/nx/ac?q=검색단어&frm=nv&st=100
  */
 
  var url = "https://ac.search.naver.com/nx/ac?q="+value+"&frm=nv&st=100"
 
  /*
  Javascript 웹 크롤링 기본 문법
  var response = UrlFetchApp.fetch(url);
  var webContent = response.getContentText();
  var jsonData = JSON.parse(webContent); 
  */
 
  var response = UrlFetchApp.fetch(url);
  var webContent = response.getContentText();
  var jsonData = JSON.parse(webContent);
 
  //Logger.log(jsonData);
 
  var result = jsonData.items;
 
  //Logger.log(result);
 
  var sResult = result.join();
 
  //Logger.log(sResult);
 
  return sResult;
 
  /*
  <!-- jsonData --> 
  {
      query=[햄버거], 
      items=[[[햄버거], [햄버거 칼로리], [햄버거 만들기], [햄버거 데우기], [햄버거 패티], [햄버거 맛집], [햄버거집], [햄버거빵], [햄버거병], [햄버거연구소]]]
    }
*/
 
 
  /**
  간혹, 언어 인코딩이 EUC-KR일 경우 한글이 깨지는 문제가 있어요!
  그럴 땐, 아래와 같이 설정을 추가하면 됩니다.
  var fetchOption = {"content-type": "text/html;charset=EUC-KR"};
  var response = UrlFetchApp.fetch(URL, fetchOption);
  var webContent = response.getContentText("EUC-KR");
  */
 
 
  /*
  배열의 모든 값을 한 문장으로 합치기
  Array.join(구분자);
  구분자 생략 시, 쉼표(,)로 연결합니다.
  */
 
}
시간대별 목차
수업 개요

1. 데이터 가공 핵심 원리! - 이중 배열 살펴보기

구글시트 이중 배열_R

오늘 강의에서는 빠른 데이터 가공을 위해 꼭 알아야 할 이중 배열의 기본 원리를 알아봅니다.

.

구글시트 이중 배열 실습_R

이후 기초 명령문 예제와 함께 이중 배열로 데이터를 불러오고 읽는 방법에 대해 알아봅니다.

2. 구글 Apps Sciprt 반복문(For) 사용법

구글시트 for 반복문 기초_R

오늘 강의에서는 Apps Script 반복문(For)의 기본 사용법을 간단한 예제와 함께 학습합니다.

.

구글 시트 mytextjoin 함수 만들기_R

이후 반복문을 활용해 나만의 MyTextJoin 함수를 제작하고 구글 시트에 바로 활용하는 방법을 알아봅니다.

3. 구글시트를 활용한 웹 데이터 크롤링 함수

구글 시트 웹 크롤링 기조_R

마지막 주제로 Apps Script로 웹 데이터를 크롤링하기 위한 마스터코드 스니펫과 기본 사용법을 알아봅니다.

.

구글시트 네이버 검색어 추출 함수_R

이후 웹 크롤링 명령문을 활용해 이버 연관 검색어를 실시간으로 크롤링하는 구글시트 함수를 제작합니다.

0 0 투표
게시글평점
0 댓글
Inline Feedbacks
모든 댓글 보기
강의노트
커리큘럼
'오빠두엑셀'의 모든 Live 강의를
월 990원에 자유롭게 수강하세요!
'위캔두 멤버쉽' 가입하기
강의 자료
  • [라이브강의] 구글시트 Apps Script 기초 5주 특별 스터디 - 3강
    PPT자료
완성파일은 영상 하단 댓글 링크를 확인해주세요.
라이브 미션
  1. 사전미션 ① : 학생 점수를 등급(A-F)로 변환하는 함수
    /**
     * 학생의 성적을 A-F 등급으로 계산합니다.
     * 
     * @param score 성적을 입력합니다.
     * @customfunction
     */
    function getGrade(score) {
     
      var grade ="";
     
      /* if (점수조건) {
        grade = ...;
      } else if () {
        grade = ..;
      } else () {
        grade = ..;
      }
      */
     
    }
보충 자료

📌 Apps Script 자동화 스터디 (3일차) - 예제 파일 및 코드

/**
 * 범위 내 각 단어를 구분자로 병합합니다.
 * 
 * @param delimiter 단어를 병합할 구분자입니다.
 * @param data 병합할 단어가 입력된 범위입니다.
 * @customfunction
 */
function myTextJoin(delimiter,data) {
 
  var result = "";
 
  /* 
  for 반복문 기본문법
  for (var row = 0; row <= 마지막값; row++) {
    var 값 = 배열[row][col];
  }
  */
 
 
 
 
  /* 단어의 마지막 글자를 자르는 구분 substring(시작위치,마지막위치)
  단어.substring(시작위치,끝위치)
  */
 
 
  /** 
    Array의 forEach 문을 사용하는 방법도 있습니다!
    ① Row를 하나씩 돌아가며 Loop
    data.forEach(function(row) {
      Logger.log(row[i])
    });
 
    ② 각 항목을 하나씩 돌아가며 Loop
    data.forEach(function(row) {
      row.forEach(function(col) {
        Logger.log(col);
      });
    });
 
    ★주의! Apps Script V8 스크립트 이후, For Each 문이 For 문으로 변경되었습니다.
    for Each 대신, for (var key in obj) 구문으로 사용합니다.
    자세한 설명은 아래 링크 참고!
    https://developers.google.com/apps-script/guides/v8-runtime/migration#avoid_for_eachvariable_in_object
    */
 
}
 
/**
 * 네이버 연관검색어 목록을 반환합니다.
 * 
 * @param value 연관검색어를 검색할 단어입니다.
 * @customfunction
 */
function getNaverSearch(value) {
  /* 
  네이버 연관검색어 조회 URL
  https://ac.search.naver.com/nx/ac?q=검색단어&frm=nv&st=100
  */
 
  /*
  Javascript 웹 크롤링 기본 문법
  var response = UrlFetchApp.fetch(url);
  var webContent = response.getContentText();
  var jsonData = JSON.parse(webContent); 
  */
 
 
 
  /**
  간혹, 언어 인코딩이 EUC-KR일 경우 한글이 깨지는 문제가 있어요!
  그럴 땐, 아래와 같이 설정을 추가하면 됩니다.
  var fetchOption = {"content-type": "text/html;charset=EUC-KR"};
  var response = UrlFetchApp.fetch(URL, fetchOption);
  var webContent = response.getContentText("EUC-KR");
  */
 
 
  /*
  배열의 모든 값을 한 문장으로 합치기
  Array.join(구분자);
  구분자 생략 시, 쉼표(,)로 연결합니다.
  */
 
}

✅ Apps Script 자동화 스터디 (3일차) - 강의 완성 코드

/**
 * 학생의 성적을 A-F 등급으로 계산합니다.
 * 
 * @param score 성적을 입력합니다.
 * @customfunction
 */
function getGrade(score) {
 
  var grade ="";
 
  if (score == 90) {
    grade = "A";
  } else if (score >= 80) {
    grade = "B";
  } else if (score >= 70) {
    grade = "C";
  } else if (score >= 60) {
    grade = "D";
  } else {
    grade= "F";
  } 
 
  return grade;
 
  /* if (점수조건) {
    grade = ...;
  } else if () {
    grade = ..;
  } else () {
    grade = ..;
  }
  */
 
}
 
function arrayTest() {
 
  var app = SpreadsheetApp;
  var activeSheet = app.getActiveSheet();
 
  var rng = activeSheet.getRange("A1:B9");
 
  Logger.log(rng.getValues());
 
}
 
/**    ---- Apps Script ---
 *       배열[0]     -> [학생명, 점수]
 *       배열[0][0]  -> 학생명
 *       배열[2][1]  -> 76.0
 * 
 * [   [학생명, 점수], 
 *    [이은지, 82.0], 
 *    [김하늘, 76.0], 
 *    [박진성, 52.0], 
 *     [최수종, 95.0],
 *      [김아라, 77.0],
 *      [정수빈, 62.0],
 *      [황현성, 81.0], 
 *     [이현우, 92.0]       ]
 * 
 */
 
/**   ---- VBA -----
 *     배열(0,0)
 * [   학생명, 점수 ;
 *    이은지, 82.0 ; 
 *    김하늘, 76.0; 
 *    박진성, 52.0;
 *     최수종, 95.0;
 *      김아라, 77.0;
 *      정수빈, 62.0;
 *      황현성, 81.0; 
 *     이현우, 92.0       ]
 * 
 */
 
 
function runningTotal() {
 
  var result = 0;
  for (var i = 1; i <=10; i+=2) {
      result += i;
      Logger.log(result);
  }
 
  /**
   * For i = 1 to 10
   *      i ~~
   * Next
   */
 
}
 
 
/**
 * 범위 내 각 단어를 구분자로 병합합니다.
 * 
 * @param delimiter 단어를 병합할 구분자입니다.
 * @param data 병합할 단어가 입력된 범위입니다.
 * @customfunction
 */
function myTextJoin(delimiter,data) {
 
  var result = "";
 
  /** 
   *    <---- data --->
   * 
   * [  [제품명,가격] 
   *    [햄버거, 5000]
   *    [피자, 8000]
   *    ....
   *    [김치찌개,5500]  ]
   * 
   */
 
  for (var i = 0; i <= data.length -1; i++) { var d = data[i]; /** * i = 0 일 때, * d = [제품명, 가격] * * i = 1 * d = [햄버거, 5000] */ //result = result + d[0] + delimiter; //result += d[0] + delimiter; if (d[0].length > 0) { 
      result += d[0] + delimiter ;
      // result = 결과1,결과2,결과3,,,,결과10,  <- 쉼표 제거 } } //문장.substring(시작위치, 종료위치) -> 문장 반환
  result = result.substring(0,result.length-delimiter.length);
 
  return result;
 
  /* 
  for 반복문 기본문법
  for (var row = 0; row <= 마지막값; row++) {
    var 값 = 배열[row][col];
  }
  */
 
 
  /* 단어의 마지막 글자를 자르는 구분 substring(시작위치,마지막위치)
  단어.substring(시작위치,끝위치)
  */
 
 
  /** 
    Array의 forEach 문을 사용하는 방법도 있습니다!
    ① Row를 하나씩 돌아가며 Loop
    data.forEach(function(row) {
      Logger.log(row[i])
    });
 
    ② 각 항목을 하나씩 돌아가며 Loop
    data.forEach(function(row) {
      row.forEach(function(col) {
        Logger.log(col);
      });
    });
 
    ★주의! Apps Script V8 스크립트 이후, For Each 문이 For 문으로 변경되었습니다.
    for Each 대신, for (var key in obj) 구문으로 사용합니다.
    자세한 설명은 아래 링크 참고!
    https://developers.google.com/apps-script/guides/v8-runtime/migration#avoid_for_eachvariable_in_object
    */
 
}
 
/**
 * 네이버 연관검색어 목록을 반환합니다.
 * 
 * @param value 연관검색어를 검색할 단어입니다.
 * @customfunction
 */
function getNaverSearch(value) {
  /* 
  네이버 연관검색어 조회 URL
  https://ac.search.naver.com/nx/ac?q=검색단어&frm=nv&st=100
  */
 
  var url = "https://ac.search.naver.com/nx/ac?q="+value+"&frm=nv&st=100"
 
  /*
  Javascript 웹 크롤링 기본 문법
  var response = UrlFetchApp.fetch(url);
  var webContent = response.getContentText();
  var jsonData = JSON.parse(webContent); 
  */
 
  var response = UrlFetchApp.fetch(url);
  var webContent = response.getContentText();
  var jsonData = JSON.parse(webContent);
 
  //Logger.log(jsonData);
 
  var result = jsonData.items;
 
  //Logger.log(result);
 
  var sResult = result.join();
 
  //Logger.log(sResult);
 
  return sResult;
 
  /*
  <!-- jsonData --> 
  {
      query=[햄버거], 
      items=[[[햄버거], [햄버거 칼로리], [햄버거 만들기], [햄버거 데우기], [햄버거 패티], [햄버거 맛집], [햄버거집], [햄버거빵], [햄버거병], [햄버거연구소]]]
    }
*/
 
 
  /**
  간혹, 언어 인코딩이 EUC-KR일 경우 한글이 깨지는 문제가 있어요!
  그럴 땐, 아래와 같이 설정을 추가하면 됩니다.
  var fetchOption = {"content-type": "text/html;charset=EUC-KR"};
  var response = UrlFetchApp.fetch(URL, fetchOption);
  var webContent = response.getContentText("EUC-KR");
  */
 
 
  /*
  배열의 모든 값을 한 문장으로 합치기
  Array.join(구분자);
  구분자 생략 시, 쉼표(,)로 연결합니다.
  */
 
}
시간대별 목차
수업 개요

1. 데이터 가공 핵심 원리! - 이중 배열 살펴보기

구글시트 이중 배열_R

오늘 강의에서는 빠른 데이터 가공을 위해 꼭 알아야 할 이중 배열의 기본 원리를 알아봅니다.

.

구글시트 이중 배열 실습_R

이후 기초 명령문 예제와 함께 이중 배열로 데이터를 불러오고 읽는 방법에 대해 알아봅니다.

2. 구글 Apps Sciprt 반복문(For) 사용법

구글시트 for 반복문 기초_R

오늘 강의에서는 Apps Script 반복문(For)의 기본 사용법을 간단한 예제와 함께 학습합니다.

.

구글 시트 mytextjoin 함수 만들기_R

이후 반복문을 활용해 나만의 MyTextJoin 함수를 제작하고 구글 시트에 바로 활용하는 방법을 알아봅니다.

3. 구글시트를 활용한 웹 데이터 크롤링 함수

구글 시트 웹 크롤링 기조_R

마지막 주제로 Apps Script로 웹 데이터를 크롤링하기 위한 마스터코드 스니펫과 기본 사용법을 알아봅니다.

.

구글시트 네이버 검색어 추출 함수_R

이후 웹 크롤링 명령문을 활용해 이버 연관 검색어를 실시간으로 크롤링하는 구글시트 함수를 제작합니다.

0 0 투표
게시글평점
0
여러분의 생각을 댓글로 남겨주세요.x