youngtsai commited on
Commit
2ab288e
·
1 Parent(s): 4120bc6
Files changed (1) hide show
  1. sheet_service.py +12 -12
sheet_service.py CHANGED
@@ -16,7 +16,7 @@ class SheetService:
16
  """
17
  SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
18
 
19
- def __init__(self, service_account_key_string: str, api_service_name: str = 'sheets', api_version: str = 'v4'):
20
  """
21
  初始化 SheetService。
22
 
@@ -65,7 +65,7 @@ class SheetService:
65
  gid = 0
66
  return spreadsheet_id, gid
67
 
68
- def get_sheet_id_by_url(self, sheet_url: str) -> str | None:
69
  """
70
  從 Google Sheets URL 中提取試算表 ID。
71
  """
@@ -81,7 +81,7 @@ class SheetService:
81
  logging.warning(f"無法從 URL 中提取有效的 Spreadsheet ID: {sheet_url}")
82
  return None
83
 
84
- def get_sheet_gid_by_url(self, sheet_url: str) -> int | None:
85
  """
86
  從 Google Sheets URL 中提取 gid (工作表分頁 ID)。
87
  返回整數型別的 gid 或 None (如果未指定則返回 0)。
@@ -90,7 +90,7 @@ class SheetService:
90
  # 即使 gid 是 0 (預設),也將其視為有效的 gid
91
  return gid
92
 
93
- def get_sheet_name_by_gid(self, spreadsheet_id: str, gid: int | None) -> str | None:
94
  """
95
  使用 spreadsheetId 和 gid 獲取工作表名稱 (title)。
96
  如果 gid 為 None,則返回第一個工作表的名稱 (gid=0)。
@@ -134,7 +134,7 @@ class SheetService:
134
  logging.error(f"獲取工作表名稱時發生 API 錯誤 (ID: {spreadsheet_id}, GID: {target_gid}): {e}")
135
  return None
136
 
137
- def get_sheet_name_by_url(self, sheet_url: str) -> str | None:
138
  """
139
  從 Google Sheets URL 中提取 gid 並獲取對應的工作表名稱。
140
  """
@@ -145,7 +145,7 @@ class SheetService:
145
  # 直接調用已有的 get_sheet_name_by_gid 方法
146
  return self.get_sheet_name_by_gid(spreadsheet_id, gid)
147
 
148
- def get_sheet_data_by_url(self, sheet_url: str, read_range: str | None = None) -> list | None:
149
  """
150
  通過 Google Sheets URL 自動獲取 Spreadsheet ID 和工作表名稱,並讀取數據。
151
  如果 URL 中包含 gid,則讀取對應的工作表;否則讀取第一個工作表。
@@ -194,7 +194,7 @@ class SheetService:
194
  # 使用現有的 get_sheet_value 方法讀取數據
195
  return self.get_sheet_value(spreadsheet_id, range_name)
196
 
197
- def get_sheet_value(self, spreadsheet_id: str, range_name: str) -> list | None:
198
  """
199
  從指定的試算表和範圍讀取資料。
200
 
@@ -238,7 +238,7 @@ class SheetService:
238
  return None
239
 
240
  @staticmethod
241
- def flatten_column_data(data: list[list[str]]) -> list[str]:
242
  """
243
  將從 Google Sheets API 獲取的單欄數據(列表的列表)扁平化為單一列表。
244
 
@@ -272,7 +272,7 @@ class SheetService:
272
  return True
273
 
274
  @staticmethod
275
- def _col_index_to_letter(col_index: int) -> str:
276
  """將 0-based 的欄位索引轉換為 A1 表示法的字母。"""
277
  if col_index < 0:
278
  raise ValueError("Column index must be non-negative")
@@ -293,7 +293,7 @@ class SheetService:
293
  return letters if letters else "A" # 確保至少返回 "A"
294
 
295
  @staticmethod
296
- def _col_index_to_letter_simple(col_index: int) -> str:
297
  """將 0-based 的欄位索引轉換為 A1 表示法的字母 (簡化版,適用於 A-ZZ)。"""
298
  if col_index < 0:
299
  raise ValueError("Column index must be non-negative")
@@ -304,7 +304,7 @@ class SheetService:
304
  return letters
305
 
306
  # SHEET_SERVICE.update_sheet_cell(sheet_url, target_row_index, qa_col_index, qa_result)
307
- def update_sheet_cell(self, sheet_url: str, target_row_index_in_data: int, qa_col_index: int, qa_result: str) -> bool:
308
  """
309
  更新指定 URL 的 Google Sheet 中的單一儲存格。
310
 
@@ -385,7 +385,7 @@ class SheetService:
385
  logging.error(f"更新儲存格時發生未知錯誤 (ID: {spreadsheet_id}, Range: {range_name}): {e}")
386
  return False
387
 
388
- def batch_update_cells(self, sheet_url: str, update_data: list[dict]) -> dict | None:
389
  """
390
  批次更新 Google Sheet 中的多個儲存格。
391
 
 
16
  """
17
  SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
18
 
19
+ def __init__(self, service_account_key_string, api_service_name='sheets', api_version='v4'):
20
  """
21
  初始化 SheetService。
22
 
 
65
  gid = 0
66
  return spreadsheet_id, gid
67
 
68
+ def get_sheet_id_by_url(self, sheet_url):
69
  """
70
  從 Google Sheets URL 中提取試算表 ID。
71
  """
 
81
  logging.warning(f"無法從 URL 中提取有效的 Spreadsheet ID: {sheet_url}")
82
  return None
83
 
84
+ def get_sheet_gid_by_url(self, sheet_url):
85
  """
86
  從 Google Sheets URL 中提取 gid (工作表分頁 ID)。
87
  返回整數型別的 gid 或 None (如果未指定則返回 0)。
 
90
  # 即使 gid 是 0 (預設),也將其視為有效的 gid
91
  return gid
92
 
93
+ def get_sheet_name_by_gid(self, spreadsheet_id, gid):
94
  """
95
  使用 spreadsheetId 和 gid 獲取工作表名稱 (title)。
96
  如果 gid 為 None,則返回第一個工作表的名稱 (gid=0)。
 
134
  logging.error(f"獲取工作表名稱時發生 API 錯誤 (ID: {spreadsheet_id}, GID: {target_gid}): {e}")
135
  return None
136
 
137
+ def get_sheet_name_by_url(self, sheet_url):
138
  """
139
  從 Google Sheets URL 中提取 gid 並獲取對應的工作表名稱。
140
  """
 
145
  # 直接調用已有的 get_sheet_name_by_gid 方法
146
  return self.get_sheet_name_by_gid(spreadsheet_id, gid)
147
 
148
+ def get_sheet_data_by_url(self, sheet_url, read_range=None):
149
  """
150
  通過 Google Sheets URL 自動獲取 Spreadsheet ID 和工作表名稱,並讀取數據。
151
  如果 URL 中包含 gid,則讀取對應的工作表;否則讀取第一個工作表。
 
194
  # 使用現有的 get_sheet_value 方法讀取數據
195
  return self.get_sheet_value(spreadsheet_id, range_name)
196
 
197
+ def get_sheet_value(self, spreadsheet_id, range_name):
198
  """
199
  從指定的試算表和範圍讀取資料。
200
 
 
238
  return None
239
 
240
  @staticmethod
241
+ def flatten_column_data(data):
242
  """
243
  將從 Google Sheets API 獲取的單欄數據(列表的列表)扁平化為單一列表。
244
 
 
272
  return True
273
 
274
  @staticmethod
275
+ def _col_index_to_letter(col_index):
276
  """將 0-based 的欄位索引轉換為 A1 表示法的字母。"""
277
  if col_index < 0:
278
  raise ValueError("Column index must be non-negative")
 
293
  return letters if letters else "A" # 確保至少返回 "A"
294
 
295
  @staticmethod
296
+ def _col_index_to_letter_simple(col_index):
297
  """將 0-based 的欄位索引轉換為 A1 表示法的字母 (簡化版,適用於 A-ZZ)。"""
298
  if col_index < 0:
299
  raise ValueError("Column index must be non-negative")
 
304
  return letters
305
 
306
  # SHEET_SERVICE.update_sheet_cell(sheet_url, target_row_index, qa_col_index, qa_result)
307
+ def update_sheet_cell(self, sheet_url, target_row_index_in_data, qa_col_index, qa_result):
308
  """
309
  更新指定 URL 的 Google Sheet 中的單一儲存格。
310
 
 
385
  logging.error(f"更新儲存格時發生未知錯誤 (ID: {spreadsheet_id}, Range: {range_name}): {e}")
386
  return False
387
 
388
+ def batch_update_cells(self, sheet_url, update_data):
389
  """
390
  批次更新 Google Sheet 中的多個儲存格。
391