使用Google API Client匹配A列编号插入URI至对应行末列
Google Sheets匹配A列编号后插入URI到对应行最后一列的实现方案
需求说明
需要实现:当Google表格A列中的编号(格式如YVA00001、YVA00002)与指定number匹配时,将uri插入该行的最后一列。目前已使用spreadsheet.values().get()和spreadsheet.values().update()方法,但无法正确检查A列数据并定位匹配行完成插入。
原代码问题分析
原代码存在以下关键问题:
- 错误遍历第一行元素而非所有行的A列数据
- 匹配逻辑写法错误,无法正确判断编号是否匹配
- 更新范围固定为第一行最后一列,未定位到匹配的目标行
修正后的代码
import json import flask from flask import Flask, jsonify, request, render_template from flask_cors import CORS import pandas as pd from main import GoogleAPIClient app = flask.Flask(__name__) CORS(app) app.config["DEBUG"] = True class GoogleSheets(GoogleAPIClient): def __init__(self) -> None: super().__init__( 'sheets', 'v4', ['https://www.googleapis.com/auth/spreadsheets'], ) def appendWorksheet(self, spreadsheetId: str, range: str, uri: json, number: json): result = self.googleAPIService.spreadsheets().values().get(spreadsheetId=spreadsheetId, range=range).execute() values = result.get('values', []) if not values: return 0 # 表格无数据直接返回 # 遍历所有行,查找A列匹配number的目标行 target_row_index = None for row_idx, row in enumerate(values): # 避免行无A列数据导致索引越界 if len(row) > 0 and row[0] == number: target_row_index = row_idx + 1 # 表格行号从1开始,需转换索引 break if target_row_index is None: return 0 # 未找到匹配行,直接返回 # 计算最后一列的列字母(A=65,ASCII码转换) max_col_count = len(values[0]) if len(values[0]) > 0 else 1 target_col_letter = chr(64 + max_col_count) # 构造目标单元格范围 update_range = f"工作表1!{target_col_letter}{target_row_index}" # 执行单元格更新 response = self.googleAPIService.spreadsheets().values().update( spreadsheetId=spreadsheetId, range=update_range, valueInputOption="RAW", body={'values': [[uri]]}, ).execute() return response.get('updatedCells', 0) # 返回更新的单元格数量
关键实现说明
- 行匹配逻辑:遍历所有行的A列(
row[0]),直接对比是否等于指定number,找到后转换为表格实际行号(代码索引从0开始,表格行号从1开始,需+1) - 异常处理:判断表格是否为空、行是否有A列数据,避免索引越界或无数据报错
- 目标单元格计算:通过第一行的列数确定最后一列的字母,结合匹配行号构造精准的更新范围
- 更新操作:将
uri以RAW格式插入到目标单元格,确保数据格式正确
内容的提问来源于stack exchange,提问作者Jayco
相关产品推荐
相关产品推荐

