Logo

Flask + xlwings:打造自动化处理Excel计算任务的强大能力

在日常工作中,Excel 文件经常需要动态更新数据,进行复杂计算。如果您曾因为手动处理 Excel 数据而苦恼,不妨试试将这一切交给 Python 来处理!本教程将教您如何用 Python 的 Flask 和 xlwings 库打造一个 API,通过简单的 POST 请求实现 Excel 数据输入和实时计算,让 Excel 处理彻底自动化。

项目亮点

  • 自动化Excel处理:无需手动操作 Excel,API 自动写入数据、计算并返回结果。
  • 轻松集成:通过 Flask 创建 API 服务,可与任意客户端程序进行集成。
  • 简化工作流程:适合财务报表、数据分析等需要频繁更新数据的场景。

让我们深入了解这个项目如何实现吧!

环境搭建

在动手之前,请确保已经安装了以下库:

pip install flask xlwings
  • Flask:轻量级的 Web 框架,用于快速创建 API。
  • xlwings:允许 Python 控制 Excel 文件的操作。
flaskxlwings-da-zao-0

代码详解:构建 Excel 处理 API

下面是完整的 Python 代码,我们会逐步解释每一部分,帮助您理解背后的原理。

import json
import xlwings as xw
import os
from flask import Flask, request, jsonify

app = Flask(__name__)

def process_excel(file_path, input_value1, input_value2):
    # 检查文件是否存在
    if not os.path.exists(file_path):
        print(f"Error: '{file_path}' does not exist.")
        return None
    
    # 启动Excel应用程序(不可见模式)
    app = xw.App(visible=False)
    try:
        # 打开Excel文件
        wb = app.books.open(file_path)
        sheet = wb.sheets.active
        
        # 输入数据
        sheet.range('I10').value = input_value1
        sheet.range('I11').value = input_value2
        
        # 获取计算结果
        result = sheet.range('I13').value
        
        print(f"输入值1: {input_value1}")
        print(f"输入值2: {input_value2}")
        print(f"计算结果: {result}")
        
        return result
    except Exception as e:
        print(f"Error: {str(e)}")
        return None
    finally:
        # 关闭Excel文件和应用
        wb.close()
        app.quit()

@app.route('/process_excel', methods=['POST'])
def excel_service():
    data = request.json
    file_path = data.get('file_path')
    input_value1 = data.get('input_value1')
    input_value2 = data.get('input_value2')
    
    # 验证参数
    if not all([file_path, input_value1, input_value2]):
        return build_failed_rsp(400, "缺少必要参数"), 200, {"Content-Type": "application/json"}
    
    # 处理Excel文件
    result = process_excel(file_path, input_value1, input_value2)
    
    if result is not None:
        return build_success_rsp(result), 200, {"Content-Type": "application/json"}
    else:
        return build_failed_rsp(500, "处理失败"), 200, {"Content-Type": "application/json"}

def build_success_rsp(data):
    rsp = {
        "message": "成功",
        "code": 0,
        "data": data
    }
    return json.dumps(rsp, ensure_ascii=False)

def build_failed_rsp(code, msg):
    rsp = {
        "message": msg,
        "code": code
    }
    return json.dumps(rsp, ensure_ascii=False)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=50073)

如何测试API服务

您可以使用 Postman 或其他工具来测试这个API。发送以下 POST 请求即可:

POST http://127.0.0.1:50073/process_excel
Content-Type: application/json

{
    "file_path": "/Users/zhanghuan/Desktop/20200606093420.xlsx",
    "input_value1": 100.6,
    "input_value2": 100.7
}

API 会读取 Excel 文件中的数据并返回计算结果。

返回示例

成功时的响应格式:

{
    "message": "成功",
    "code": 0,
    "data": 201.3
}

当文件路径错误或处理失败时的响应:

{
    "message": "处理失败",
    "code": 500
}

常见问题解答

1. 这个代码可以在没有Excel的软件上运行吗?
不行,xlwings依赖于本地安装的Excel应用。因此,请确保在Windows或Mac上运行此代码。

2. API端点可以用于批量处理Excel文件吗?
目前的实现是一次处理一个文件。但您可以通过循环请求的方式进行批量处理,或者在代码中增加批处理逻辑。

3. 如何调试处理失败的问题?
可以检查是否文件路径正确、Excel文件是否已损坏,或Excel是否支持所需的公式计算。

总结

通过Python结合Flask和xlwings库,您可以轻松地构建一个自动化处理Excel的API服务。不管是需要定期更新的数据表格,还是复杂的财务报表计算,都可以通过此方法大大简化工作流程。希望本教程对您的Python项目有帮助,助您在工作中事半功倍!

准备好彻底告别繁琐的Excel操作了吗?赶紧试试这个自动化Excel API吧!

分享内容