[GoogleAppScript] SpreadSheet에 무작위 값을 쓰는 기능 추가

13913 단어 GoogleAppsScriptgas

개요



임의의 정수와 캐릭터 라인을 랜덤으로 취득한 값을 SpreadSheet 에 추가하는 기능을 작성하는 순서에 대해 정리한다.
※임의의 정수와 캐릭터 라인을 랜덤하게 취득하는 방법에 대해서는 [Javascript] 지정된 범위의 정수를 취득하는 랜덤 클래스의 작성 에 기재

전제 지식


  • 기본 GAS, JavaScript 지식
  • [GoogleAppsScript (GAS)] "Hello World"하는 방법
  • GoogleAppsScript(GAS) 함수를 API로 게시하고 터미널에서 실행하는 방법
  • [Javascript] 지정된 범위의 정수를 취득하는 랜덤 클래스의 작성

  • 아티팩트



    [My Menu] → [도도부현과 연령을 랜덤하게 취득]을 클릭하면, 「도도부현(문자열)」과 「연령(수치)」열에 랜덤인 임의의 값이 추가되는 기능의 구현


    전체상



    함수 실행의 흐름을 아래 그림으로 표시


    구현 코드



    Random.gs
    class Random {
      // min: 最小値 include
      // max: 最大値 exclude
        intRange(min,max){
          return Math.floor(min + (max-min) * Math.random()) 
        }
    }
    

    코드.gs
    const onOpen = (e) => {
      SpreadsheetApp.getUi()
          .createMenu('My Menu') // 上部メニューにMy Menuを追加
          .addItem('都道府県と年齢をランダムに書き込む', 'appendUserInfo') 
          .addToUi();
    }
    
    //都道府県のリスト
    const prefList = ["北海道","青森県","岩手県","宮城県","秋田県","山形県","福島県"]
    
    //list からランダムで一つ返す
    const getRandomPref = (list) =>{
      const random = new Random();
      const prefListNum = random.intRange(0,list.length);
      return list[prefListNum];
    }
    
    //年齢をmin(include)~max(exclude)の範囲でランダムに返す
    const getRandomAge = (min, max) =>{
      const random = new Random();
      return random.intRange(min,max);
    }
    
    // userInfoをsampleシートに書き込む
    const appendRow = (userInfo) => {
      const spreadSheet = SpreadsheetApp.getActive();
      const sheet = spreadSheet.getSheetByName("sample");
      sheet.appendRow([userInfo.pref,userInfo.age]);
    }
    
    
    // メニューのボタンを押すと実行される関数
    const appendUserInfo = () =>{
     // 20個のデータを作る
      for (let i = 0; i < 20; i++){
        const pref = getRandomPref(prefList);
        const age = getRandomAge(18,66);
        // 書き込むデータ(1行)
        const userInfo = {  
          pref:pref,
          age:age
        }
        appendRow(userInfo);
      }
      Browser.msgBox("データの整備が完了しました");
    }
    

    ※함수 밖에서 랜덤 클래스의 인스턴스화를 실시하고 싶었지만, 할 수 없었기 때문에 getRandomPref , getRandomAge 함수의 각각으로 인스턴스화를 행하고 있다

    탭에 함수 실행 버튼 만들기


    onOpen 는 스프레드시트 시작 시 실행되는 특수 함수 이름입니다.SpreadsheetApp.getUi()는 탭에서 함수를 실행하는 메뉴를 만들 때 사용합니다.
    const onOpen = (e) => {
      SpreadsheetApp.getUi()
          .createMenu('タブ名') 
          .addItem('関数の表示名', '呼び出す関数名') 
          .addToUi();
    

    참고 : Google App Script getUi

    배열 정의 및 검색


    //配列の定義
    const 配列の変数名 = [配列の要素1, 配列の要素2, 配列の要素3,・・・]; 
    
    //配列の要素の取得方法
    配列[何番目かを示す数]
    

    스프레드시트에 값 추가


    appendRow 는 한 줄씩 값 (배열로 전달)을 추가하는 함수
    const spreadSheet = SpreadsheetApp.getActive();
    const sheet = spreadSheet.getSheetByName("シート名");
    sheet.appendRow([A列に追加する値,B列に追加する値,・・・]);
    

    참고 : Google App Script appendRow

    for 문 (반복)을 작성하는 방법



    for 문 (반복)을 처리하려면 다음과 같이
    for(let i = 0; i < ループ数; i++){
        繰り返す処理
    }
    

    각각, 이하와 같은 의미가 있지만, 상기의 기술 방법을 정형문으로서 기억해 두면 문제 없다let i = 0 : 최초로 실행하는 처리의 정의i < ループ数 : 루프 계속 조건i++: 루프 마다 실행되는 처리

    팝업 표시



    처리가 끝났을 때 등에 팝업을 표시할 수 있다

    .js
    Browser.msgBox("表示したいメッセージ")
    

    참고 : Google App Script msgBox

    요약



    GAS 스크립트 편집기는 무겁다 (특히 onOpen).
    탭등도 기재하기 어렵기 때문에, 다른 에디터를 이용하는 편이 좋은 생각이 든다.

    참고


  • GAS에서 SpreadSheet를 읽고 씁니다.
  • JavaScript의 배열을 배우는 연습·과제
  • GAS (google app script)로 팝업을 표시하는 방법
  • 좋은 웹페이지 즐겨찾기