Google Sheets API 마스터하기: 소개부터 Python 예제까지 📊🐍
Google Sheets API는 개발자가 프로그래밍 방식으로 Google Sheets 스프레드시트와 상호작용할 수 있도록 지원하는 강력한 도구입니다. 이 API를 활용하면 데이터의 읽기, 쓰기, 서식 지정, 차트 생성 등 다양한 작업을 자동화하여 반복적인 업무를 줄이고 생산성을 획기적으로 높일 수 있습니다.
데이터베이스의 정보를 시트에 실시간으로 동기화하거나, 웹사이트에서 수집된 사용자 데이터를 자동으로 정리하고, 매일 생성되는 보고서를 자동으로 만드는 등 활용 분야는 무궁무진합니다.
주요 기능
- 데이터 읽기 및 쓰기: 특정 셀, 범위, 또는 시트 전체의 데이터를 가져오거나 새로운 데이터를 입력하고 수정할 수 있습니다.
- 서식 지정: 글꼴, 색상, 테두리 등 셀 서식을 동적으로 변경하여 가독성 높은 보고서를 자동으로 생성할 수 있습니다.
- 시트 및 스프레드시트 관리: 새로운 시트를 추가하거나 기존 시트를 복사, 삭제하는 등의 작업을 코드로 제어할 수 있습니다.
- 차트 및 피벗 테이블 생성: 데이터를 기반으로 차트나 피벗 테이블을 만들어 데이터 시각화 및 분석 작업을 자동화할 수 있습니다.
시작하기: API 사용을 위한 기본 단계
- Google Cloud 프로젝트 생성: Google Cloud Platform에서 새로운 프로젝트를 생성합니다.
- Google Sheets API 활성화: 생성한 프로젝트의 'API 및 서비스' 대시보드에서 Google Sheets API를 검색하여 활성화합니다.
- 사용자 인증 정보 생성: API에 접근하기 위한 인증 정보를 생성해야 합니다. 주로 OAuth 2.0 클라이언트 ID와 서비스 계정 키 방식이 사용됩니다.
- OAuth 2.0: 웹 애플리케이션 등에서 최종 사용자의 구글 계정으로 시트에 접근할 때 사용됩니다. 사용자의 동의 과정이 필요합니다.
- 서비스 계정: 서버 기반의 자동화 작업처럼 사용자 개입 없이 애플리케이션이 직접 데이터에 접근할 때 사용됩니다. (예: 매일 새벽 데이터를 집계하는 서버)
- 인증 정보 파일 다운로드: 인증 정보가 생성되면
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을 함께 사용하면, 간단한 코드 몇 줄만으로도 강력한 스프레드시트 자동화 시스템을 구축할 수 있습니다.
