· 톺아보기

질문

[구글 앱스 스크립트] 날짜로 데이터 불러오기 스크립트 관련

우유가좋아 ·

조회 3,148 · 공감 0 · 댓글 2

안녕하세요..

취미로 구글 스프레드시트 앱스 스크립트롤 공부하고 있습니다.

정말 초보이고 유투브로 하나씩 보면서 익히고 있는 중입니다.

간단한 일기를 쓸 수 있는 양식을 한번 만들어 보고 있는데요.

양식 시트와 데이터 시트를 구분하여 매크로 버튼을 활용하여 데이터를 입력 및 출력을 해보려고 하는데...

양식 시트에 제가 입력한 원하는 날짜로 데이터 시트에서 정보를 불러오고 싶은데 어떻게 수정을 해야할지 막막합니다.

스샷과 스크립트를 첨부하니 고수 분들의 아낌없는 조언 구걸 합니다...ㅜㅜ

?????????? 2021-04-25 09.11.14.png


Form1(양식)시트와 Data 시트로 나뉘어져 있습니다.

Data 시트에는 Form1시트 데이터가 저장 됩니다.

?????????? 2021-04-25 09.13.51.png


앱스 스크립트 코드는 다음과 같습니다.

// Save Data

function submitData() {

 

 var SPREADSHEET_NAME = "Data";

 var SEARCH_COL_IDX = 0;

 var RETURN_COL_IDX = 0;

    

  var ss        = SpreadsheetApp.getActiveSpreadsheet();

  var formSS    = ss.getSheetByName("Form1"); //Form Sheet

  var datasheet = ss.getSheetByName("Data"); //Data Sheet

  

  var str       = formSS.getRange("C8").getValue();

  var values    = ss.getSheetByName(SPREADSHEET_NAME).getDataRange().getValues();

  for (var i = 0; i < values.length; i++) {

    var row = values[i];

    if (row[SEARCH_COL_IDX] != str) {

        //SpreadsheetApp.getUi().alert(' "Emp #' + formSS.getRange("C8").getValue() + '  "');

       // return row[RETURN_COL_IDX];

    //} else  {

     //Input Values

     var values1 = [[formSS.getRange("C8").getValue(),

                 formSS.getRange("C10").getValue(),

                 formSS.getRange("C12").getValue(),

                 formSS.getRange("C14").getValue()]];

   

     // Save New Data

     

     datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 4).setValues(values1);

     SpreadsheetApp.getUi().alert(' "New Data Saved - Emp #' + formSS.getRange("C8").getValue() +' "');

  

     formSS.getRange("C8").clear();

     formSS.getRange("C10").clear();

     formSS.getRange("C12").clear();

     formSS.getRange("C14").clear();

      return row[RETURN_COL_IDX];

    }

 

  }

}

//=========================================================

// Clear form

function clearCell() {

  var ss        = SpreadsheetApp.getActiveSpreadsheet();

  var formSS    = ss.getSheetByName("Form1"); //Form Sheet

  

    

  formSS.getRange("C8").clear();

  formSS.getRange("C10").clear();

  formSS.getRange("C12").clear();

  formSS.getRange("C14").clear();

  return true ;

  

}

//=====================================================================

var SEARCH_COL_IDX = 0;

var RETURN_COL_IDX = 0;

function searchStr() {

  

  var ss        = SpreadsheetApp.getActiveSpreadsheet();

  var formSS    = ss.getSheetByName("Form1"); //Form Sheet

  

  var str       = formSS.getRange("D4").getValue();

  var values    = ss.getSheetByName("Data").getDataRange().getValues();

  for (var i = 0; i < values.length; i++) {

    var row = values[i];

    if (row[SEARCH_COL_IDX] == str) {

     

      

      formSS.getRange("C8").setValue(row[0]) ;

      formSS.getRange("C10").setValue(row[1]);

      formSS.getRange("C12").setValue(row[2]);

      formSS.getRange("C14").setValue(row[3]);

      

      return row[RETURN_COL_IDX];

      

    }

  }

}

현재까지는 데이터 입력과 삭제 그리고 데이터를 불러오는 것 까지 이해하면서 작성을 했는데요(배꼈는데요...;;)

D4셀을 다른걸로 했을 때는 잘 불러오는데 날짜로 했을 때는 정보를 불러오지 못하더라구요...

저 수식을 어떻게 수정 해야 날짜를 불러올 수 있을까요?


댓글 2

  1. 마수리 ·
    var str = formSS.getRange("D4").getValue();

    D4에 데이터타입(포멧)이 날짜객체여서 저장이 안되고 있는 것으로 예상됩니다.

    그래서 만약 우유가좋아님이 지금 계획하신대로 "2021년 4월 26일" 형태로만 저장하는걸 원하신다면

    var str = formSS.getRange("D4").getDisplayValue();

    getDisplayValue 메서드로 값을 가져오시면 됩니다.

    ---

    그런데 만약 스프레드시트를 데이터베이스로 사용하시고 싶으시다면 일반적으로는 .getValue() 값에서 날짜형식 문자열로 변환해서 저장하는데 이부분은 나중에 한번 검토해보시면 될 것 같습니다.
  2. 우유가좋아 ·
    @마수리님 댓글 남겨주셔서 정말 감사드립니다. 말씀하신대로 한번 시도해 보도록 하겠습니다 :)

개발한당 최근 글

개발한당 목록 더 보기