You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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列所有行,过滤空值,精准找到最后一条有效记录的行号,避免中间有空行时定位错误。
  • 灵活追加数据:支持单行或多行数据的批量追加,适配不同的数据源返回格式。

常见错误排查

如果之前的代码出现问题,大概率是以下原因:

  1. 使用了不支持读写现有文件的库(如xlwt只能生成新文件)。
  2. for循环逻辑错误:没有正确跟踪最后有效行,甚至错误地覆盖了原有行数据。
  3. 没有处理文件不存在的情况,导致程序报错。

内容的提问来源于stack exchange,提问作者AnxiousDino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:54:22