Spaces:
Running
Running
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 |
|