구글 스프레드시트 자동화(5) - 외부 스크립트로 자동화 하기(수정됨)

chaejm55·2022년 3월 25일
2

지금까진 스프레드 시트 내의 Apps script를 사용했는데 이번엔 외부에서 python을 통해 스프레드시트의 내용을 수정하고 작업을 자동화 해보려한다.

1. 프로젝트 생성 및 준비(수정됨)

특정 스프레드 시트에만 외부 스크립트를 사용할 예정이므로 따로 서비스 계정을 만드는 방법을 사용한다.


https://console.developers.google.com/ 구글 개발자 콘솔로 들어가 프로젝트를 먼저 생성하자.

적절한 프로젝트 이름을 지정해주자.

프로젝트 생성이 완료되면 해당 프로젝트 선택 후 대시보드로 가서 API 및 서비스 메뉴로 이동한다.

API 및 서비스에서 왼쪽 두번째 라이브러리를 선택한다.


Google Sheets API를 검색해서 사용 버튼을 눌러준다.(수정됨)

Google Drive API도 검색해서 사용 버튼을 눌러준다.

잠시 후 API 및 서비스로 돌아오는데 안내 문구에 뜨는대로 사용자 인증 정보를 만들자.

위쪽의 사용자 인증 정보 만들기를 눌러 서비스 계정을 선택한다.

계정 이름과 계정 설명을 입력해주자. 서비스 계정 ID는 계정 이름에 맞게 자동으로 입력해준다.

다음으로 프로젝트 엑세스 권한을 부여하자. 본인이 본인 스프레드 시트 수정을 할 예정이니 소유자를 선택해준다.

마지막으로 다른 계정에 엑세스 권한부여가 있는데 본 포스팅에서는 혼자 사용할 예정이니 입력하지 않고 완료한다.

생성 후 생성한 서비스 계정을 클릭한다.

위의 메뉴에서 로 이동해 새 키 만들기를 클릭한다.

JSON으로 만들어서 키를 다운로드하자.

다운로드 받은 JSON 파일에서 이메일을 복사하자.

사용할 스프레드 시트에 편집자로 복사한 이메일을 추가한다.

이제 python에서 코드를 입력하여 스프레드 시트를 외부에서 다뤄보자.

2. python 라이브러리 설치(수정됨)

과거 버전(3.6 이전)에서는 주로 oauth2client를 사용했으나 현재 deprecated 되었고 google-auth가 인증을 위해 사용된다. 물론 과거 버전의 코드를 사용해도 gspread가 알아서 변환해주지만 본 포스팅에서는 새 버전의 코드를 사용하겠다.

gspread 라이브러리를 설치해준다. 설치 시 google-auth 라이브러리도 함께 설치된다.
pip install gspread

3. 코드 예시

Authentication(수정됨)

먼저 authentication 코드는 다음과 같다.

import gspread

scopes = [
    'https://www.googleapis.com/auth/spreadsheets',
    'https://www.googleapis.com/auth/drive'
]

gc = gspread.service_account(filename='JSON 파일 경로.json') # 수정됨

sheet 열기(Authentication 부분 수정됨)

이제 sheet를 열고 다뤄보자.

import gspread

scopes = [
    'https://www.googleapis.com/auth/spreadsheets',
    'https://www.googleapis.com/auth/drive'
]

gc = gspread.service_account(filename='JSON 파일 경로.json') # 수정됨

# 스프레드 시트 열기
# sheet = gc.open('스프레드 시트 이름')
# sheet = gc.open_by_key('스프레드 시트 키')
sheet = gc.open_by_url('스프레드 시트 url')


# 워크시트 선택하기
# worksheet = sheet.get_worksheet(0)
# worksheet = sheet.sheet1
worksheet = sheet.worksheet("시트1") # 이름으로 워크시트 선택

# 모든 워크시트 리스트 가져오기
# worksheet_list = sh.worksheets()

시트 추가 생성 및 삭제

# 시트 추가 생성
new_worksheet = sheet.add_worksheet(title="새 워크시트 이름", rows=100, cols=20)

# 시트 삭제
del_worksheet = sheet.worksheet("삭제할_시트")
sheet.del_worksheet(del_worksheet) # 삭제 하려는 워크시트 선택 후 파라미터로 입력

시트 내용 읽기

# 셀 데이터 가져오기
val = worksheet.acell('B1').value
val = worksheet.cell(1, 2).value

# 특정 행 데이터 가져오기
rows_list = worksheet.row_values(1)

# 특정 열 데이터 가져오기
cols_list = worksheet.col_values(1)

# 범위 선택하여 데이터 가져오기
range_val_list = worksheet.range('A1:B2')

# list of list로 모든 데이터 가져오기
values_lists = worksheet.get_all_values()

# list of dictionary로 모든 데이터 가져오기
values_dicts = worksheet.get_all_records()

시트 내용 쓰기

# 셀에 내용 쓰기
worksheet.update('B1', 'B1 수정')
worksheet.update_cell(1, 2, '(1,2) 수정')

# 범위로 셀에 내용 쓰기
worksheet.update('A1:B2', [[1, 2], [3, 4]])

# 행으로 한번에 데이터 추가하기
worksheet.append_row(['0', '1', '2', '3', '4'])
worksheet.append_row(['0', '1', '2', '3', '4'], 5) # 행(여기서는 5행) 선택해서 추가

시트 Formatting

gspread를 통해 시트 formatting도 가능하다

worksheet.format("A2:B2", {
    "backgroundColor": { # 셀 배경을 검은색으로
      "red": 0.0,
      "green": 0.0,
      "blue": 0.0
    },
    "horizontalAlignment": "CENTER", # 중앙 정렬
    "textFormat": { 
      "foregroundColor": { # 글자색을 흰색으로
        "red": 1.0,
        "green": 1.0,
        "blue": 1.0
      },
      "fontSize": 12, # 글자 크기 12pt
      "bold": True # 볼드체
    }
})

format에 들어갈 cellFormat은 문서를 확인하자.

4. 마무리

gspread를 통해 python 코드로 구글 스프레드 시트를 다루는 방법을 알아보았다. 코드 작성을 통해 반복적인 일을 자동화 할 수 있으니 잘 활용해보자.

5. Reference

파이썬으로 구글드라이브/스프레드시트 API 활용하기 (예제)

gspread Docs

Google Sheet API Docs
profile
여러가지를 시도하는 학생입니다

3개의 댓글

comment-user-thumbnail
2022년 4월 8일

올바르지 않았던 정보를 바로잡았습니다. 올바르지 않은 정보로 혼동을 드린점 죄송합니다.

답글 달기
comment-user-thumbnail
2022년 7월 20일

안녕하세요 ~ 좋은글 감사합니다 몇가지 궁금한점이 있는데 ~
혹시 자동인쇄같은 기능도 가능한가요??

1개의 답글