import time
from gsheet_utils import (get_spreadsheet, get_worksheet, write_range,
write_doctor_table, batch_update_requests)
DST = 'YYYYMMDD' # e.g. 20260420
SRC = 'YYYYMMDD' # 最近一份已存在的日期工作表
sh = get_spreadsheet()
# 刪除既有同名(若 rebuild)
if get_worksheet(DST):
sh.del_worksheet(get_worksheet(DST))
time.sleep(1)
# Duplicate
src_ws = sh.worksheet(SRC)
resp = sh.batch_update({'requests': [{
'duplicateSheet': {'sourceSheetId': src_ws.id, 'newSheetName': DST}
}]})
new_id = resp['replies'][0]['duplicateSheet']['properties']['sheetId']
time.sleep(1)
dst_ws = sh.worksheet(DST)
# 【關鍵】Unmerge 全部 — 否則來源子表合併列會吃掉主資料行
batch_update_requests([{
'unmergeCells': {
'range': {'sheetId': new_id, 'startRowIndex': 0, 'endRowIndex': 200,
'startColumnIndex': 0, 'endColumnIndex': 22}
}
}])
time.sleep(1)
# 清空
dst_ws.batch_clear(['A2:V200'])
time.sleep(1)
# 寫主資料 A-K
main_data = [
['2026-04-20', '2026-04-21', '心臟血管科', '陳儒逸', '4010', '王翠月', '女', '98', '01305368', '', '3'],
# ...
]
write_range(dst_ws, f'A2:K{1+len(main_data)}', main_data)
# 白底 + 靠左對齊(主資料列)
batch_update_requests([{
"repeatCell": {
"range": {"sheetId": new_id, "startRowIndex": 1,
"endRowIndex": 1 + len(main_data),
"startColumnIndex": 0, "endColumnIndex": 12},
"cell": {"userEnteredFormat": {
"backgroundColor": {"red": 1.0, "green": 1.0, "blue": 1.0},
"horizontalAlignment": "LEFT",
"verticalAlignment": "MIDDLE",
"textFormat": {"fontSize": 11},
}},
"fields": "userEnteredFormat(backgroundColor,horizontalAlignment,verticalAlignment,textFormat)"
}
}])
# 建醫師子表(從 main_data_end_row + 3 開始)
next_row = 1 + len(main_data) + 3
for doctor, patients in DOCTORS:
next_row = write_doctor_table(dst_ws, next_row, doctor, patients)