시트 생성 및 업데이트 - 시트 생성
시트 생성 및 업데이트를 하나의 DAG에서 Task를 나눠 진행하였다. 처음에는 DAG를 나눠 진행하였는데 그 이유는 다음과 같다.
- 시트 생성이 다 되기 전에 업데이트 Task 진행에 대한 우려.
- 생성 및 업데이트에서 오류가 발생하더라도 다른 Task는 계속 진행되게끔 하기 위하여.
하지만 결산을 위한 시트이기에 생성 및 업데이트에 오류가 있더라도 코드 수정을 최대한 빠르게 한다면 업무에 지장이 없었고 시트 생성 후 time 라이브러리의 sleep을 활용하여 강제적으로 잠시 쉬게 만들어 해결하였다.


def create_sheets():
# === 기존 기록 로드 ===
tabs_dict = load_file_to_dict(SHEET_TABS_INFO)
# === 구글 시트 연결
sheets = get_sheets_service()
# === 노션 데이터 불러오기
results = notion.databases.query(database_id=PROJECT_DB_ID)["results"]
# 신규 프로젝트
new_pages = []
# 신규 프로젝트 체크
for page in results:
sheet_url = page["properties"]["sheet url"]["url"]
if sheet_url == None:
new_pages.append(page)
# 최근 생성된 프로젝트일 수록 시트가 마지막에 생성되게끔 정열
new_pages.reverse()
# === 시트 복사 및 데이터 삽입
for page in new_pages:
props = page["properties"]
project_name = props["프로젝트명"]["title"][0]["plain_text"]
new_tab_title = f"{project_name}_결산"
# 탭 복사
copied_tab = sheets.spreadsheets().sheets().copyTo(
spreadsheetId=GOOGLE_SHEET_ID,
sheetId=TEMPLATE_TAB_ID,
body={"destinationSpreadsheetId": GOOGLE_SHEET_ID}
).execute()
# 새로 생긴 결산 탭 gid
new_tab_id = copied_tab["sheetId"]
# gid : tab_title 저장
tabs_dict[new_tab_id] = new_tab_title
# 탭 이름 변경
sheets.spreadsheets().batchUpdate(
spreadsheetId=GOOGLE_SHEET_ID,
body={
"requests": [
{
"updateSheetProperties": {
"properties": {
"sheetId": new_tab_id,
"title": new_tab_title
},
"fields": "title"
}
}
]
}
).execute()
# 노션에 링크 업데이트
sheet_url = f"https://docs.google.com/spreadsheets/d/{GOOGLE_SHEET_ID}/edit?gid={new_tab_id}#gid={new_tab_id}"
notion.pages.update(
page_id=page["id"],
properties={
"sheet url": {"url": sheet_url}
}
)
notion.blocks.children.append(
block_id=page["id"],
children=[
{
"object": "block",
"type": "embed",
"embed": {
"url": sheet_url # 시트 URL 입력
}
},
{
"object": "block",
"type": "heading_2",
"heading_2": {
"rich_text": [
{
"type": "text",
"text": {
"content": "공지사항"
}
}
]
}
}
]
)
time.sleep(3)
# 기록 저장
save_file_to_dict(SHEET_TABS_INFO, tabs_dict)
print("✅ 시트 생성 완료")
time.sleep(5)
시트 생성 과정
- 노션에서 신규 프로젝트 여부 체크.(각 프로젝트 속성으로 시트의 url을 저장하게끔 하여 url이 채워지지 않았다면 신규 프로젝트)
- 신규 시트 생성(템플릿 시트 복제) 및 시트 탭 타이틀 변경
- 신규 시트 gid : 탭 타이틀 정보 저장(탭 타이틀 변경 사항 체크용)
- 신규 시트 url을 노션에 저장
'프로젝트' 카테고리의 다른 글
| 노션 - 구글 Sheet 연동 (5) (0) | 2025.08.20 |
|---|---|
| 노션 - 구글 Sheet 연동 (4) (0) | 2025.08.19 |
| 노션 - 구글 Sheet 연동 (2) (1) | 2025.07.23 |
| 노션 - 구글 Sheet 연동 (1) (1) | 2025.07.21 |