如何用Python读取Excel指定列最后一行并追加新数据?
解决Excel追加数据到最后一行的问题(结合Flask)
核心需求是从URL获取数据后,定位Excel第0列(A列)的最后非空行,在其后追加新数据且保留原有内容。下面是修正后的实现方案,使用openpyxl库(支持读写现有Excel文件,不会覆盖原有数据):
实现步骤与代码
1. 依赖安装
先安装所需库:
pip install flask requests openpyxl
2. 完整Flask代码
from flask import Flask, jsonify import requests from openpyxl import load_workbook, Workbook app = Flask(__name__) # 从URL获取数据的函数 def fetch_target_data(url): try: resp = requests.get(url) resp.raise_for_status() # 捕获HTTP请求错误 return resp.json() except Exception as e: print(f"数据获取失败: {str(e)}") return None # 追加数据到Excel的核心函数 def append_data_to_excel(file_path, new_data): # 加载或创建Excel文件 try: wb = load_workbook(file_path) ws = wb.active except FileNotFoundError: # 文件不存在时创建新工作簿 wb = Workbook() ws = wb.active # 可选:添加表头(如果需要) # ws.append(["列1", "列2", "列3"]) # 定位第0列(A列)的最后非空行 last_valid_row = 1 # 遍历A列所有行,找到最后有值的行 for row_num in range(1, ws.max_row + 1): cell_value = ws.cell(row=row_num, column=1).value if cell_value is not None and cell_value != "": last_valid_row = row_num # 计算插入新数据的行号 insert_row_num = last_valid_row + 1 # 追加数据:支持单行或多行数据 if isinstance(new_data, list): # 如果是单行数据(一维列表) if not isinstance(new_data[0], list): ws.append(new_data) # 如果是多行数据(二维列表) else: for row_data in new_data: ws.append(row_data) # 保存文件 wb.save(file_path) return True # Flask路由:处理数据追加请求 @app.route('/add-to-excel', methods=['GET']) def add_to_excel(): # 替换为你的目标数据URL target_url = "https://your-data-source-url.com/api/data" excel_path = "your-file.xlsx" # 获取数据 data = fetch_target_data(target_url) if not data: return jsonify({"status": "fail", "msg": "无法获取数据"}), 500 # 追加数据到Excel if append_data_to_excel(excel_path, data): return jsonify({"status": "success", "msg": "数据已成功追加"}) else: return jsonify({"status": "fail", "msg": "数据追加失败"}), 500 if __name__ == '__main__': app.run(debug=True)
关键说明
- 避免数据覆盖:用
load_workbook加载现有文件,而非创建新文件覆盖,确保原有数据保留。 - 准确定位最后行:遍历A列所有行,过滤空值,精准找到最后一条有效记录的行号,避免中间有空行时定位错误。
- 灵活追加数据:支持单行或多行数据的批量追加,适配不同的数据源返回格式。
常见错误排查
如果之前的代码出现问题,大概率是以下原因:
- 使用了不支持读写现有文件的库(如
xlwt只能生成新文件)。 - for循环逻辑错误:没有正确跟踪最后有效行,甚至错误地覆盖了原有行数据。
- 没有处理文件不存在的情况,导致程序报错。
内容的提问来源于stack exchange,提问作者AnxiousDino
相关产品推荐
相关产品推荐

