본문 바로가기

Data & MarTech

구글시트 API(Google Sheets API) in Python 데이터 업데이트

반응형

구글시트 API(Google Sheets API) in Python 데이터 업데이트


Google Sheet API 확인하기

REST Resource: v4.spreadsheets.values
  • Append: Spreadsheet에 데이터를 추가할 때 사용합니다. 지정된 범위에 데이터가 있을 경우 다음 행 또는 열에서 데이터가 추가됩니다.
  • Update: 정해진 Spreadsheet 범위를 설정하여 데이터 쓰기를 할 때 사용합니다. 기존 범위(range)에 데이터가 작성되어 있는 경우에 덮어쓰기가 실행됩니다.
  • BatchUpdate: Spreadsheet 내 여러 범위(range)를 설정하여 데이터 쓰기를 할 때 사용합니다. 기존 범위(range)에 데이터가 작성되어 있는 경우에 덮어쓰기가 실행됩니다.

 

Update

데이터 업데이트를 할때 일반적으로 많이 사용하는 기능입니다. 연속된 범위(이하 Range)를 지정하여 구글시트를 업데이트할 때 사용하면 됩니다.

Python으로 Google Sheet Update하기

googlesheet_main.py

update_data함수 파라미터값을 테스트 중인 구글시트네임과 셀을 A1 표기법(A1 notation)에 따라 지정하였습니다. 

  • 시트네임: ProductTable
  • 셀범위: A9
    • 입력하는 셀의 범위가 정확히는 A9:C9이지만, A9으로 지정해도 Body에 있는 Value값에 따라 업데이트가 되므로 A9만 지정해도 됩니다.
from googlesheet_utils import GooglesheetUtils

if __name__ == "__main__":
    googlesheet = GooglesheetUtils()
    googlesheet.update_data('ProductTable!A9')
googlesheet_utils.py
  • range: main.py에서 'ProductTable!A9'를 매개변수값으로 전달받아 수행합니다.
  • valueInputOption='USER_ENTERED'로 지정하여 등록한 값이 데이터타입에 따라 파싱되도록 합니다.
  • includeValuesInResponse=True로 지정하여 변경된 값을 확인할 수 있도록 합니다.
  • body
    • majorDimension을 'ROWS'로 지정하여 행 방향으로 values가 작성되도록 합니다.
    • values: 기존에 작성된 구글시트 헤더에 맞게 product id, product name, product price 순으로 배열을 전달합니다.
from pprint import pprint
from googleapiclient import discovery
from google.oauth2 import service_account

class GooglesheetUtils:
    spreadsheet_id = '1j5JmkqOFsv_WvJTwPVhRx9RbwmxZcaT27OZ3vNp8r0w'
    
    def __init__(self) -> None:
        self.credentials = service_account.Credentials.from_service_account_file(
            'service_account_for_bq_tutorial.json',
            scopes = ['https://www.googleapis.com/auth/spreadsheets']
        )
        self.service = discovery.build('sheets','v4', credentials=self.credentials)
    
    
    # Googlesheet update
    def update_data(self, range_name) -> None:
        request = self.service.spreadsheets().values().update(
            spreadsheetId=self.spreadsheet_id,
            valueInputOption='USER_ENTERED',
            includeValuesInResponse=True,
            range=range_name,
            body={
                'majorDimension': 'ROWS',
                'values': [
                    [
                        10001119,
                        "Adidas Hoodie",
                        49900
                    ]
                ]
            }
        )
        response = request.execute()
        pprint(response)

Code 실행 결과

API로 Google Sheet Update하기

HTTP request

PUT https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{range}

path parameters

  • spreadsheetId: 업데이트할 스프레트시트 ID
  • range: 업데이트할 값 범위. range를 작성하는 방법은 A1 notation을 따릅니다.
    • 예) Sheet1!A1:D5 (Sheet1 A1셀부터 D5셀까지의 영역)

query parameters

  • includeValuesInResponse(optional): true로 설정하여 API 호출시 values가 리턴되도록 설정하였습니다.
  • valueInputOption(required): USER_ENTERED(유저가 입력한 값을 파싱하여 타입에 맞춰 값이 등록되도록 함)
  • Request body
    • majorDimension: "ROWS"로 선택하여 values값이 행으로 등록되도록 함
    • values: 입력할 값. 아래 코드에 첨부한 테스트 데이터를 values로 등록

Update API 호출
Google Sheet Update 실행 결과


BatchUpdate

연속되지 않은 범위(이하 Range)를 개별적으로 지정하여 구글시트를 업데이트할 때 사용하는 기능입니다. 예를 들어 연속되지 않은 범위인 A2:C2, A6:C2를 업데이트하는 경우 BatchUpdate 기능을 활용하여 해당 행을 개별적으로 지정하여 업데이트할 수 있습니다.

Python으로 Google Sheet Update하기

googlesheet_main.py
  • batch_update_date 파라미터에 "WriteTest!A2", "WriteTest!A6" 튜플값으로 입력하였습니다.
from googlesheet_utils import GooglesheetUtils

if __name__ == "__main__":
    googlesheet = GooglesheetUtils()
    googlesheet.batch_update_date("WriteTest!A2", "WriteTest!A6")
googlesheet_utils.py
  • batch_update는 update와 달리 path변수에 해당하는 값은 spreadsheetId뿐입니다.
  • valueInputOption, includeValuesInResponse는 body값에 포함합니다.
  • data값에 연속되지 않는 range를 각각 배열로 선언하며, 전달받은 range값은 튜플에서 각각 읽어오도록 하였습니다.
from pprint import pprint
from googleapiclient import discovery
from google.oauth2 import service_account

class GooglesheetUtils:
    spreadsheet_id = '1j5JmkqOFsv_WvJTwPVhRx9RbwmxZcaT27OZ3vNp8r0w'
    
    
    def __init__(self) -> None:
        self.credentials = service_account.Credentials.from_service_account_file(
            'service_account_for_bq_tutorial.json',
            scopes = ['https://www.googleapis.com/auth/spreadsheets']
        )
        self.service = discovery.build('sheets','v4', credentials=self.credentials)
	
    
    def batch_update_date(self, *ranges) -> None:
        request = self.service.spreadsheets().values().batchUpdate(
            spreadsheetId=self.spreadsheet_id,
            body={
                "valueInputOption": "USER_ENTERED",
                "includeValuesInResponse": True,
                "data": [
                    {
                        "range": ranges[0],
                        "values": [
                            [
                                10001149,
                                "Nike P6000",
                                119000
                            ]
                        ]
                    },
                    {
                        "range": ranges[1],
                        "values": [
                            [
                                10001255,
                                "Nike KD 15",
                                129000
                            ]
                        ]
                    }
                ]
            }
        )
        response = request.execute()
        pprint(response)

Code 실행 결과

API로 Google Sheet Update하기

HTTP request

POST https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values:batchUpdate

path parameters

  • spreadsheetId: 업데이트할 스프레트시트 ID

request body

  • valueInputOption
  • includeValuesInResponse
  • data: 업데이트할 데이터
    • range
    • values

Batch Update API 실행
Google Sheet Batch Update 실행 결과

 


참고자료

Update
 

Method: spreadsheets.values.update  |  Google Sheets  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 Method: spreadsheets.values.update 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

developers.google.com

 

Batch Update
 

Method: spreadsheets.values.batchUpdate  |  Google Sheets  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 Method: spreadsheets.values.batchUpdate 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세

developers.google.com

Read and write cell values
 

셀 값 읽기 및 쓰기  |  Google Sheets  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 셀 값 읽기 및 쓰기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 스프레

developers.google.com

 

반응형