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

Flask上传Excel保存报错:AttributeError: 'Typed'对象无to_tree属性

解决Flask中处理Excel保存时的AttributeError: 'Typed' object has no attribute 'to_tree'问题

问题分析

这个错误是openpyxl在处理含特殊图表(如组合图、带复杂元素的图表)的Excel文件时,内部序列化逻辑的bug导致的。你之前只删除了普通工作表中的图表,但工作簿中可能还存在独立的图表工作表(ChartSheet),或者openpyxl的内部图表结构未彻底清理,保存时仍会触发错误。

解决方案

方案1:彻底清理所有图表(保留原文件其他格式)

修改代码,同时删除图表工作表和普通工作表中的所有图表,避免索引错乱问题:

from flask import *
from openpyxl import load_workbook  # 补充缺失的导入

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/submit', methods=['POST'])
def submit():
    if 'f1' in request.files:
        uploaded_file = request.files['f1']
        # 读取上传的Excel文件
        wb = load_workbook(uploaded_file, data_only=True, read_only=False, keep_vba=True, rich_text=True)
        
        # 1. 删除所有独立的图表工作表
        chart_sheet_names = [name for name in wb.sheetnames if isinstance(wb[name], wb.ChartSheet)]
        for name in chart_sheet_names:
            del wb[name]
        
        # 2. 清空普通工作表中的所有图表
        for sheet in wb.worksheets:
            sheet._charts.clear()
        
        # 保存处理后的文件
        wb.save('output.xlsx')
        return "文件处理完成"
    return "未检测到上传文件"

方案2:用Pandas绕过图表问题(仅保留数据)

如果不需要保留原文件的VBA、图表或复杂格式,直接用Pandas读取数据再保存,完全避开openpyxl的图表解析问题:

from flask import *
import pandas as pd

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/submit', methods=['POST'])
def submit():
    if 'f1' in request.files:
        uploaded_file = request.files['f1']
        # 读取所有工作表数据
        excel_file = pd.ExcelFile(uploaded_file)
        with pd.ExcelWriter('output.xlsx') as writer:
            for sheet_name in excel_file.sheet_names:
                df = pd.read_excel(excel_file, sheet_name=sheet_name)
                df.to_excel(writer, sheet_name=sheet_name, index=False)
        return "文件处理完成"
    return "未检测到上传文件"

方案3:升级openpyxl版本

你当前使用的openpyxl 3.1.4版本存在已知的图表序列化bug,升级到最新稳定版可能直接解决问题:

pip install --upgrade openpyxl

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:14:57