[Node.js] googleapis 사용한 Googel Spread Sheet 연동[Node.js] googleapis 사용한 Googel Spread Sheet 연동

Posted at 2020. 8. 26. 14:41 | Posted in Node.js/Google Spread Sheet




API : https://developers.google.com/sheets/api/reference/rest

참고 : https://www.youtube.com/watch?v=MiPpQzW_ya0










 $ npm install googleapis@59.0.0      // 해당 포스팅은 59.0.0 버전을 사용함








■ 구글 시트 데이터 읽어오고, 출력하기





# 원본데이터 - 구글시트






# 소스코드

 google_sheet_select.js

const {google} = require( "googleapis" );

const keys = require( "./사용자_계정_KEY.json" );


const client = new google.auth.JWT(

      keys.client_email

    , null

    , keys.private_key

    , [ 'https://www.googleapis.com/auth/spreadsheets' ]  // 사용자 시트 및 해당 속성에 대한 읽기/쓰기 액세스 허용

);


client.authorize( function( err, tokens ) {


    if( err ) {

        console.log( err );

        return;

    } else {

        gsrunclient );

    }

});


async function gsrun( client ) {


    const sheetsgoogle.sheets( { version : "v4", auth : client } );


    const request = {

          spreadsheetId : "구글_시트_아이디"

        , range : "시트_이름!A2:D10"

        // , range : "twice"    // 범위를 지정하지 않으면 해당 Sheet의 모든 Shell 값을 가져온다.

    };


    const response = ( await sheets.spreadsheets.values.get( request ) ).data;

    console.log( response );

}






# 출력결과











■ 구글 시트 데이터 읽고, 데이터 가공하기





# 원본데이터 - 구글시트






# 소스코드 

 google_sheet_processing.js

const {google} = require( "googleapis" );

const keys = require( "./사용자_계정_KEY.json" );


const client = new google.auth.JWT(

      keys.client_email

    , null

    , keys.private_key

    , [ 'https://www.googleapis.com/auth/spreadsheets' ]  // 사용자 시트 및 해당 속성에 대한 읽기/쓰기 액세스 허용

);


client.authorize( function( err, tokens ) {


    if( err ) {

        console.log( err );

        return;

    } else {

        gsrunclient );

    }

});


async function gsrun( client ) {


    const sheets = google.sheets( { version : "v4", auth : client } );


    const request = {

          spreadsheetId : "구글_시트_아이디"

        , range : "시트_이름!A2:F7"

    };


    const response = ( await sheets.spreadsheets.values.get( request ) ).data;

    const responseArray = response.values;


    // console.log( responseArray );


    // @see LAST NAME과 FIRST NAME을 합친다

    let realNames = new Array();

    responseArray.map( function( val ) {

        realNames.push( val[2] + " " + val[3] );

        return realNames;

    });


    console.log( realNames );

}












■ 구글 시트 데이터 입력하기




# 소스코드

 google_sheet_appends.js

const {google} = require( "googleapis" );

const keys = require( "./사용자_계정_KEY.json" );


const client = new google.auth.JWT(

      keys.client_email

    , null

    , keys.private_key

    , [ 'https://www.googleapis.com/auth/spreadsheets' ]  // 사용자 시트 및 해당 속성에 대한 읽기/쓰기 액세스 허용

);


client.authorize( function( err, tokens ) {


    if( err ) {

        console.log( err );

        return;

    } else {

        gsrunclient );

    }

});


async function gsrun( client ) {


    const sheets = google.sheets( { version : "v4", auth : client } );


    let memberArray = new Array();

    memberArray[0] = new Array( "1", "윤채경", "1996-07-07", "서브보컬" );

    memberArray[1] = new Array( "2", "김채원", "1997-11-08", "메인보컬" );

    memberArray[2] = new Array( "3", "이나은", "1999-05-05", "센터, 서브보컬" );

    memberArray[3] = new Array( "4", "양예나", "2000-05-22", "메인댄서, 리드래퍼, 서브보컬" );

    memberArray[4] = new Array( "5", "레이첼", "2000-08-28", "메인댄서, 리드댄서, 서브보컬" );

    memberArray[5] = new Array( "6", "이진솔", "2001-12-04", "리드보컬, 막내" );


    const request = {

          spreadsheetId : "구글_시트_아이디"

        , range : "시트_이름"

        , valueInputOption : "USER_ENTERED"

        , insertDataOption : "OVERWRITE"    // OVERWRITE or INSERT_ROWS 선택

        , resource : { values : memberArray }

    };


    const response = await sheets.spreadsheets.values.append( request );

    console.log( response );

}




# valueINputOption 설정

설정값

설명

 INPUT_VALUE_OPTION_UNSPECIFIED

 · 기본 입력 값, 이 값은 사용해서는 안 된다.

 RAW

 · 사용자가 입력한 값은 구문 분석되지 않고 그대로 저장된다.

 USER_ENTERED

 · 사용자가 UI에 입력한 것처럼 값을 구문 분석한다.

 · 숫자는 숫자로 유지되지만 문자열은 구글 시트 UI를 통해 셀에 텍스트를 입력할 때

  적용되는 것과 동일한 규칙에 따라 숫자, 날짜 등으로 변환될 수 있다.




# insertDataOption 설정

설정값

설명

 OVERWRITE

 입력되는 데이터값은, 작성된 영역의 셀서식을 그대로 따른다.

 INSERT_ROWS

 입력되는 데이터값은, 입력이 시작될 행의 바로 위에 위치한 행의 셀서식을 그대로 따른다.





# 출력결과 - 구글시트

 $ node google_sheet_appends.js










■ 구글 시트 데이터 수정하기





# 소스코드

 google_sheet_update.js

const {google} = require( "googleapis" );

const keys = require( "./사용자_계정_KEY.json" );


const client = new google.auth.JWT(

      keys.client_email

    , null

    , keys.private_key

    , [ 'https://www.googleapis.com/auth/spreadsheets' ]  // 사용자 시트 및 해당 속성에 대한 읽기/쓰기 액세스 허용

);


client.authorize( function( err, tokens ) {


    if( err ) {

        console.log( err );

        return;

    } else {

        gsrunclient );

    }

});


async function gsrun( client ) {


    const sheets = google.sheets( { version : "v4", auth : client } );


    let memberArray = new Array();

    memberArray[0] = new Array( "1", "쥬리", "1997-10-06", "서브보컬" );

    memberArray[1] = new Array( "2", "연희", "2000-12-06", "리더, 리드보컬" );

    memberArray[2] = new Array( "3", "수윤", "2001-03-17", "메인보컬" );

    memberArray[3] = new Array( "4", "윤경", "2001-11-01", "메인댄서, 서브보컬" );

    memberArray[4] = new Array( "5", "소희", "2003-08-14", "서브보컬" );

    memberArray[5] = new Array( "6", "다현", "2005-04-29", "서브보컬" );


    const request = {

          spreadsheetId : "구글_시트_아이디"

        , range : "시트_이름!A2"  // 범위를 지정해 주지 않으면 A1 행부터 데이터를 덮어 씌운다.

        , valueInputOption : "USER_ENTERED"

        , resource : { values : memberArray }

    };


    const response = await sheets.spreadsheets.values.update( request );

    console.log( response );

}





# 출력결과 - 구글시트


 $ node google_sheet_update.js












■ 구글 시트 데이터 복사, 붙여넣기






# 소스코드

 google_sheet_copy.js

const {google} = require( "googleapis" );

const keys = require( "./사용자_계정_KEY.json" );


const client = new google.auth.JWT(

      keys.client_email

    , null

    , keys.private_key

    , [ 'https://www.googleapis.com/auth/spreadsheets' ]  // 사용자 시트 및 해당 속성에 대한 읽기/쓰기 액세스 허용

);


client.authorize( function( err, tokens ) {


    if( err ) {

        console.log( err );

        return;

    } else {

        gsrunclient );

    }

});


async function gsrun( client ) {


    const sheets = google.sheets( { version : "v4", auth : client } );


    const selectRequest = {

          spreadsheetId : "구글_시트_아이디"

        , range : "복사할_시트_이름!A2:A6"

    };


    const selectResponse = ( await sheets.spreadsheets.values.get( selectRequest ) ).data;

    const responseArray = selectResponse.values;


    const updateRequest = {

          spreadsheetId : "구글_시트_아이디"

        , range : "붙여넣기할_시트_이름!D2"

        , valueInputOption : "USER_ENTERED"

        , resource : { values : responseArray }

    };


    const response = await sheets.spreadsheets.values.append( updateRequest );

    console.log( response );

}





# 출력결과 - 구글시트


 $ node google_sheet_copy.js














Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기