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

使用Python XlsxWriter生成图表失败:保存文件无图表,求排查解决

解决XlsxWriter饼图不显示的问题

我帮你定位到问题啦!你的代码里有个核心问题导致图表无法生成——你写入Excel的数值是字符串类型,而XlsxWriter的饼图需要基于数值型数据才能正常渲染。

问题分析

当你通过stroka.split()获取val时,它是字符串格式。直接写入工作表后,Excel会把这些值识别为文本而非数字,饼图无法将文本作为数据来源,所以最终文件里看不到图表。另外,你的代码还缺少对空数据场景的处理,如果没有读取到任何有效数据,创建图表时会报错。

修改后的代码

这里是修复后的完整代码,我添加了数据类型转换、错误处理和空数据判断:

import xlsxwriter
from sys import stdin

workbook = xlsxwriter.Workbook('res.xlsx')
worksheet = workbook.add_worksheet()
data = []

for stroka in stdin:
    stroka = stroka.strip()  # 移除首尾空白(包括换行符)
    if not stroka:
        break  # 遇到空行停止读取输入
    parts = stroka.split()
    # 确保每行至少有两个元素,避免索引越界
    if len(parts) >= 2:
        name = parts[0]
        try:
            # 将数值转为float,兼容整数和小数场景
            val = float(parts[1])
            data.append((name, val))
        except ValueError:
            print(f"跳过无效行:{stroka}(数值格式错误)")

# 写入数据到工作表
for row, (name, val) in enumerate(data):
    worksheet.write(row, 0, name)
    worksheet.write(row, 1, val)

# 仅当有有效数据时创建饼图
if data:
    chart = workbook.add_chart({'type': 'pie'})
    # 配置图表数据:分类用A列名称,数值用B列数据
    chart.add_series({
        'categories': f'=Sheet1!A1:A{row + 1}',
        'values': f'=Sheet1!B1:B{row + 1}',
        'name': '数据分布饼图'
    })
    # 插入图表到工作表指定位置
    worksheet.insert_chart('C3', chart)
else:
    print("未读取到有效数据,跳过图表生成")

workbook.close()

关键修改点说明

  • 数值类型转换:把stroka[1]转为float(或int),确保写入Excel的是数值而非文本,图表才能正确识别数据。
  • 输入处理优化:用strip()清理输入行的空白,更准确判断空行;添加索引越界和数值格式的错误处理,避免程序崩溃。
  • 图表条件创建:当没有有效数据时不创建图表,防止出现空图表或报错。
  • 完善图表配置:添加categories参数关联A列的名称,让饼图显示更直观的标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:00:01