Spaces:
Sleeping
Sleeping
def style
Browse files- 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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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
|
| 198 |
"""
|
| 199 |
從指定的試算表和範圍讀取資料。
|
| 200 |
|
|
@@ -238,7 +238,7 @@ class SheetService:
|
|
| 238 |
return None
|
| 239 |
|
| 240 |
@staticmethod
|
| 241 |
-
def flatten_column_data(data
|
| 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
|
| 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
|
| 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
|
| 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
|
| 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 |
|