Python脚本整合Jira爬取与Google Sheets写入仅存最后一条数据求助
嘿,我来帮你解决这个只写入最后一条数据的问题!
问题根源
你遇到的情况几乎可以肯定是:在循环处理Jira数据时,每次都把数据写入到Google Sheets的同一个位置,导致前面的所有数据都被最后一条覆盖了。单独爬取能拿到50条,说明Jira部分没问题,就是写入 Sheets 的逻辑没处理好。
解决方案
我给你两种可行的修改思路,结合你的代码来调整:
方案1:先收集所有数据,一次性写入(推荐,效率更高)
这种方式会先把所有Jira数据存到一个列表里,再一次性批量写入到Sheets,减少API调用次数,也不会出现覆盖问题。
修改后的完整代码示例:
# coding=utf-8 from jira.client import JIRA import gspread from oauth2client.service_account import ServiceAccountCredentials # 补充完整权限范围,避免权限不足 SCOPES = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"] credentials = ServiceAccountCredentials.from_json_keyfile_name("你的密钥文件名.json", SCOPES) connection = gspread.authorize(credentials) # 打开你的目标表格和工作表(这里用sheet1,你可以改成实际的工作表名) target_sheet = connection.open("你的Google Sheets表格名称").sheet1 # Jira连接配置 options = {'server': 'https://jira.blank.com/'} # 补充Jira认证(替换成你的账号和API token/密码) jira = JIRA(options, basic_auth=("你的Jira账号", "你的认证密钥")) # 获取50条Jira数据(替换成你的实际JQL查询) jira_issues = jira.search_issues("你的JQL查询语句", maxResults=50) # 1. 先收集所有要写入的数据 all_records = [] # 先添加表头(如果你的表格还没有表头的话) all_records.append(["Issue编号", "标题", "状态"]) # 替换成你需要的字段 # 遍历Jira数据,提取字段 for issue in jira_issues: # 这里替换成你实际要爬取的字段 single_record = [ issue.key, issue.fields.summary, issue.fields.status.name ] all_records.append(single_record) # 2. 一次性写入所有数据 # 如果表格已有表头,就从A2开始写:target_sheet.update("A2", all_records[1:]) target_sheet.update("A1", all_records)
方案2:逐行追加写入(适合需要实时更新的场景)
如果不想一次性收集数据,可以每次循环时找到表格的下一行,把数据插入进去,避免覆盖:
# 前面的连接代码和方案1一致,省略... # 获取当前表格已有的行数,下一行就是要写入的位置 next_write_row = len(target_sheet.get_all_values()) + 1 for issue in jira_issues: single_record = [ issue.key, issue.fields.summary, issue.fields.status.name ] # 插入到下一行 target_sheet.insert_row(single_record, next_write_row) # 行号自增,准备写下一条 next_write_row += 1
关键注意点
- 确保你的SCOPES包含
https://www.googleapis.com/auth/drive,否则可能出现Sheets权限不足的问题 - 替换代码中所有带
你的xxx的内容,比如密钥文件名、表格名称、Jira认证信息、JQL查询 - 如果你的表格已经有表头,记得调整写入的起始行(比如方案1从A2开始,方案2的
next_write_row要从表头下一行开始)
内容的提问来源于stack exchange,提问作者Leap Head
相关产品推荐
相关产品推荐

