Google Sheets API 마스터하기: 소개부터 Python 예제까지 📊🐍

Google Sheets API 마스터하기: 소개부터 Python 예제까지

Google Sheets API는 개발자가 프로그래밍 방식으로 Google Sheets 스프레드시트와 상호작용할 수 있도록 지원하는 강력한 도구입니다. 이 API를 활용하면 데이터의 읽기, 쓰기, 서식 지정, 차트 생성 등 다양한 작업을 자동화하여 반복적인 업무를 줄이고 생산성을 획기적으로 높일 수 있습니다.

데이터베이스의 정보를 시트에 실시간으로 동기화하거나, 웹사이트에서 수집된 사용자 데이터를 자동으로 정리하고, 매일 생성되는 보고서를 자동으로 만드는 등 활용 분야는 무궁무진합니다.

주요 기능

  • 데이터 읽기 및 쓰기: 특정 셀, 범위, 또는 시트 전체의 데이터를 가져오거나 새로운 데이터를 입력하고 수정할 수 있습니다.
  • 서식 지정: 글꼴, 색상, 테두리 등 셀 서식을 동적으로 변경하여 가독성 높은 보고서를 자동으로 생성할 수 있습니다.
  • 시트 및 스프레드시트 관리: 새로운 시트를 추가하거나 기존 시트를 복사, 삭제하는 등의 작업을 코드로 제어할 수 있습니다.
  • 차트 및 피벗 테이블 생성: 데이터를 기반으로 차트나 피벗 테이블을 만들어 데이터 시각화 및 분석 작업을 자동화할 수 있습니다.

시작하기: API 사용을 위한 기본 단계

  1. Google Cloud 프로젝트 생성: Google Cloud Platform에서 새로운 프로젝트를 생성합니다.
  2. Google Sheets API 활성화: 생성한 프로젝트의 'API 및 서비스' 대시보드에서 Google Sheets API를 검색하여 활성화합니다.
  3. 사용자 인증 정보 생성: API에 접근하기 위한 인증 정보를 생성해야 합니다. 주로 OAuth 2.0 클라이언트 ID서비스 계정 키 방식이 사용됩니다.
    • OAuth 2.0: 웹 애플리케이션 등에서 최종 사용자의 구글 계정으로 시트에 접근할 때 사용됩니다. 사용자의 동의 과정이 필요합니다.
    • 서비스 계정: 서버 기반의 자동화 작업처럼 사용자 개입 없이 애플리케이션이 직접 데이터에 접근할 때 사용됩니다. (예: 매일 새벽 데이터를 집계하는 서버)
  4. 인증 정보 파일 다운로드: 인증 정보가 생성되면 credentials.json과 같은 JSON 파일을 다운로드하여 프로젝트 폴더에 저장합니다. 이 파일은 API 접근 시 인증을 위해 사용됩니다.

Python 사용 예제

사전 준비

먼저, 필요한 라이브러리를 설치해야 합니다. 터미널이나 명령 프롬프트에서 아래 명령어를 실행하세요.

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

또한, 위에서 다운로드한 credentials.json 파일이 코드 실행 파일과 같은 위치에 있어야 합니다.

공통 인증 코드

아래 코드는 API 서비스 객체를 생성하는 공통 부분입니다. 처음 실행 시 브라우저를 통해 구글 계정 로그인을 요청하며, 이후에는 생성된 token.json 파일로 자동 인증됩니다.

import os.path

from google.auth.transport.requests import Request

from google.oauth2.credentials import Credentials

from google_auth_oauthlib.flow import InstalledAppFlow

from googleapiclient.discovery import build

from googleapiclient.errors import HttpError

# 데이터를 수정해야 하므로 읽기/쓰기 권한을 모두 포함합니다.

SCOPES = ["https://www.googleapis.com/auth/spreadsheets"]

def get_sheets_service():

    """Google Sheets API 서비스 객체를 생성하고 반환합니다."""

    creds = None

    if os.path.exists("token.json"):

        creds = Credentials.from_authorized_user_file("token.json", SCOPES)

    if not creds or not creds.valid:

        if creds and creds.expired and creds.refresh_token:

            creds.refresh(Request())

        else:

            flow = InstalledAppFlow.from_client_secrets_file("credentials.json", SCOPES)

            creds = flow.run_local_server(port=0)

        with open("token.json", "w") as token:

            token.write(creds.to_json())

    return build("sheets", "v4", credentials=creds)

1. 데이터 읽기 (Reading Data)

지정한 범위의 데이터를 읽어와서 출력하는 예제입니다.

def read_sheet(service, spreadsheet_id, range_name):

    """시트에서 데이터를 읽습니다."""

    try:

        sheet = service.spreadsheets()

        result = (

            sheet.values()

            .get(spreadsheetId=spreadsheet_id, range=range_name)

            .execute()

        )

        values = result.get("values", [])

        if not values:

            print("데이터가 없습니다.")

            return

        print("시트에서 읽어온 데이터:")

        for row in values:

            print(row)

    except HttpError as err:

        print(f"오류가 발생했습니다: {err}")

# --- 실행 부분 ---

# SERVICE = get_sheets_service()

# SPREADSHEET_ID = "YOUR_SPREADSHEET_ID"  # 실제 스프레드시트 ID 입력

# read_sheet(SERVICE, SPREADSHEET_ID, "Sheet1!A1:C5")

2. 데이터 쓰기 (Writing Data)

지정한 셀에 새로운 데이터를 추가하거나 덮어쓰는 예제입니다.

def write_sheet(service, spreadsheet_id, range_name, values):

    """시트에 데이터를 씁니다."""

    try:

        body = {"values": values}

        result = (

            service.spreadsheets()

            .values()

            .update(

                spreadsheetId=spreadsheet_id,

                range=range_name,

                valueInputOption="RAW",

                body=body,

            )

            .execute()

        )

        print(f"{result.get('updatedCells')}개의 셀이 업데이트되었습니다.")

    except HttpError as err:

        print(f"오류가 발생했습니다: {err}")

# --- 실행 부분 ---

# SERVICE = get_sheets_service()

# SPREADSHEET_ID = "YOUR_SPREADSHEET_ID"

# data_to_write = [

#     ["이름", "부서", "직책"],

#     ["홍길동", "인사팀", "팀장"],

#     ["이순신", "개발팀", "개발자"],

# ]

# write_sheet(SERVICE, SPREADSHEET_ID, "Sheet1!A1", data_to_write)

3. 데이터 삭제 (Clearing Data)

지정한 범위의 데이터를 모두 지웁니다. (값만 삭제되며 서식은 남습니다.)

def clear_sheet(service, spreadsheet_id, range_name):

    """시트의 특정 범위 데이터를 삭제합니다."""

    try:

        clear_values_request_body = {}

        request = (

            service.spreadsheets()

            .values()

            .clear(

                spreadsheetId=spreadsheet_id,

                range=range_name,

                body=clear_values_request_body,

            )

        )

        response = request.execute()

        print(f"'{response.get('clearedRange')}' 범위의 데이터가 삭제되었습니다.")

    except HttpError as err:

        print(f"오류가 발생했습니다: {err}")

# --- 실행 부분 ---

# SERVICE = get_sheets_service()

# SPREADSHEET_ID = "YOUR_SPREADSHEET_ID"

# clear_sheet(SERVICE, SPREADSHEET_ID, "Sheet1!A1:C10")

이처럼 Google Sheets API와 Python을 함께 사용하면, 간단한 코드 몇 줄만으로도 강력한 스프레드시트 자동화 시스템을 구축할 수 있습니다.

이 블로그의 인기 게시물

블로그 미리보기 생성기

호주, AI 도입의 골든타임

당신도 AI 전문가가 될 수 있다! 2025년 비전공자 인재 양성 가이드