openpyxl, pandas, xlwings 뭐가 다를까? 파이썬 엑셀 라이브러리 3종 비교
"팀원들이 각자 구글 시트에 입력한 데이터를 매일 아침 취합해서 정리해야 하는데…", "웹에서 수집한 데이터를 구글 시트에 자동으로 업데이트하면 좋겠는데…"
구글 스프레드시트는 팀 협업에 편리하지만, 데이터를 매번 손으로 입력하거나 다른 파일에서 복사해 붙여넣는 작업은 번거롭고 실수가 납니다. 파이썬을 한 번만 세팅해두면 구글 시트의 데이터를 자동으로 읽어오고, 원하는 내용을 자동으로 입력하고, 기존 데이터를 업데이트하는 것까지 모두 처리할 수 있습니다.
파이썬에서 구글 스프레드시트에 접근하려면 구글 클라우드에서 API 키를 발급받아야 합니다. 아래 순서대로 진행하세요.
다운로드한 JSON 파일을 credentials.json으로 이름을 바꾸고 코드 파일과 같은 폴더에 저장합니다.
⚠️ 마지막 설정: 자동화할 구글 스프레드시트를 열고 오른쪽 상단 "공유" 버튼 클릭 → JSON 파일 안의 "client_email" 값(xxxx@xxxx.iam.gserviceaccount.com 형태)을 복사해서 편집자 권한으로 공유합니다. 이 설정이 없으면 파이썬에서 접근이 거부됩니다.
터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:
pip install gspread google-auth pandas
gspread는 파이썬에서 구글 스프레드시트를 다루는 전용 라이브러리입니다. google-auth는 1단계에서 발급한 JSON 키로 구글 API에 인증하는 라이브러리이고, pandas는 데이터를 표 형태로 처리하는 데 사용합니다.
아래 코드를 그대로 복사해서 메모장에 붙여넣고, gsheet_auto.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다. credentials.json 파일과 같은 폴더에 저장해야 합니다.
import gspread
from google.oauth2.service_account import Credentials
import pandas as pd
from datetime import datetime
# ① 설정
CREDENTIALS_FILE = "credentials.json" # ← JSON 키 파일명
SPREADSHEET_NAME = "팀 업무 현황" # ← 구글 시트 제목 (정확히 일치해야 함)
SHEET_NAME = "Sheet1" # ← 시트 탭 이름
# ② 구글 API 인증
SCOPES = [
"https://www.googleapis.com/auth/spreadsheets",
"https://www.googleapis.com/auth/drive",
]
creds = Credentials.from_service_account_file(CREDENTIALS_FILE, scopes=SCOPES)
client = gspread.authorize(creds)
print(" ✔ 구글 API 인증 완료")
# ③ 시트 열기
spreadsheet = client.open(SPREADSHEET_NAME)
sheet = spreadsheet.worksheet(SHEET_NAME)
print(f" ✔ 시트 열기 완료: '{SPREADSHEET_NAME} > {SHEET_NAME}'")
# ④ 데이터 읽기 (전체)
all_data = sheet.get_all_records() # 1행(헤더) 기준으로 딕셔너리 리스트 반환
df = pd.DataFrame(all_data)
print(f" ✔ 데이터 읽기 완료: {len(df)}행 × {len(df.columns)}열")
print(df.head()) # 상위 5행 미리보기
# ⑤ 새 행 추가 (시트 맨 아래에 추가)
new_row = [
datetime.now().strftime("%Y-%m-%d"), # 날짜
"신규 거래처", # 거래처명
"홍길동", # 담당자
1500000, # 금액
"진행중", # 상태
]
sheet.append_row(new_row)
print(f" ✔ 새 행 추가 완료: {new_row}")
# ⑥ 특정 셀 업데이트 (B2 셀을 수정하는 예시)
sheet.update("B2", "업데이트된 값")
print(f" ✔ B2 셀 업데이트 완료")
print(f"\n✅ 완료! 구글 시트 자동화 성공")
SPREADSHEET_NAME에 자동화할 구글 시트 제목을 정확히 입력합니다. 대소문자·공백까지 일치해야 합니다.SHEET_NAME에 탭 이름을 입력합니다. 기본값은 "Sheet1"이지만, 탭 이름을 변경했다면 변경된 이름을 입력합니다.new_row 내용을 본인 시트 열 구조에 맞게 수정합니다.python gsheet_auto.py
정상 실행 시 터미널에 이렇게 출력됩니다:
✔ 구글 API 인증 완료
✔ 시트 열기 완료: '팀 업무 현황 > Sheet1'
✔ 데이터 읽기 완료: 15행 × 5열
날짜 거래처명 담당자 금액 상태
0 2026-05-01 A주식회사 홍길동 5200000 완납
1 2026-05-03 B연구소 김철수 980000 미납
...
✔ 새 행 추가 완료: ['2026-05-29', '신규 거래처', '홍길동', 1500000, '진행중']
✔ B2 셀 업데이트 완료
✅ 완료! 구글 시트 자동화 성공
오류 1: SpreadsheetNotFound
구글 시트 제목이 코드와 다르거나, 서비스 계정 이메일로 시트를 공유하지 않은 경우입니다. 1단계 마지막 설정에서 client_email 값으로 시트를 편집자 권한으로 공유했는지 다시 확인하세요.
오류 2: APIError 429 (Too Many Requests)
구글 Sheets API는 1분에 60회 요청 제한이 있습니다. 반복문 안에서 셀을 한 개씩 업데이트하면 금방 한도를 초과합니다. 여러 셀을 한꺼번에 업데이트할 때는 sheet.update()에 2차원 배열을 한 번에 넘기세요:
sheet.update("A2:C4", [["값1", "값2", "값3"], ["값4", "값5", "값6"]])
오류 3: DefaultCredentialsError
credentials.json 파일이 코드 파일과 같은 폴더에 없는 경우입니다. 두 파일이 같은 폴더 안에 있는지 확인하거나, CREDENTIALS_FILE에 JSON 파일의 전체 경로를 입력하세요.
구글 시트 데이터를 로컬 엑셀 파일로 자동 백업하는 코드입니다. 코드 ④ 읽기 아래에 추가하세요.
from pathlib import Path
BACKUP_PATH = r"C:\Users\내이름\Desktop\시트백업.xlsx" # ← 백업 파일 경로
df.to_excel(BACKUP_PATH, index=False)
print(f" ✔ 엑셀 백업 완료 → {BACKUP_PATH}")
💡 이전 게시글과 결합하면: 웹 데이터 자동 수집 편으로 수집한 데이터를 구글 시트에 자동으로 입력하거나, 주식·환율 자동 수집 편의 데이터를 팀 공유 시트에 매일 자동 업데이트하는 것도 가능합니다.
이 코드를 응용하면 여러 시트를 순서대로 처리하거나, 조건에 따라 특정 행의 색상을 자동으로 변경하는 것도 가능합니다.