4人参与 • 2026-08-03 • Python
在销售报表、库存清单或运营数据中,我们经常需要观察一组数据随时间的变化趋势。
直接插入折线图虽然直观,但当表格中包含多个产品、部门或项目时,为每一行数据分别创建图表会占用大量空间,也会让工作表变得拥挤。
excel 迷你图是一种嵌入单元格的小型图表。它可以直接显示在数据行旁边,用较小的空间呈现增长、下降和波动趋势。
本文将介绍如何使用 python:
迷你图与普通 excel 图表的主要区别在于,它通常只显示在一个单元格中。
例如,下面是一组产品的月度销售数据:
| 产品 | 1月 | 2月 | 3月 | 4月 | 趋势 |
|---|---|---|---|---|---|
| 产品a | 120 | 135 | 128 | 160 | 迷你图 |
| 产品b | 95 | 110 | 108 | 126 | 迷你图 |
可以在每行数据右侧放置一个迷你图,让读者不需要逐个比较数字,就能快速判断数据的整体变化方向。
常见的迷你图包括三种类型:
spire.xls for python 提供了折线、柱形和盈亏三种迷你图类型,并可以通过迷你图组统一管理其类型、颜色和数据范围。
本文使用 spire.xls for python 创建和编辑 excel 文件。
可以通过 pip 安装:
pip install spire.xls
安装完成后,在 python 代码中导入相关类:
from spire.xls import * from spire.xls.common import *
该包当前可以通过 pypi 安装,导入模块名称为 spire.xls。
下面先创建一个包含四种产品月度销售额的工作表。
数据区域为 a1:m5:
from spire.xls import *
from spire.xls.common import *
# 创建工作簿
workbook = workbook()
# 获取第一个工作表
sheet = workbook.worksheets[0]
sheet.name = "monthly sales"
# 表头
headers = [
"product",
"jan", "feb", "mar", "apr", "may", "jun",
"jul", "aug", "sep", "oct", "nov", "dec",
"trend"
]
# 月度销售数据
sales_data = [
["product a", 120, 135, 128, 160, 172, 168, 190, 205, 198, 220, 235, 248],
["product b", 95, 108, 115, 110, 126, 140, 138, 150, 163, 158, 172, 185],
["product c", 180, 172, 165, 170, 158, 150, 162, 155, 148, 142, 150, 138],
["product d", 75, 92, 88, 105, 98, 115, 121, 118, 132, 140, 137, 152]
]
# 写入表头
for column_index, header in enumerate(headers, start=1):
sheet.range[1, column_index].text = header
# 写入产品和销售数据
for row_index, row_data in enumerate(sales_data, start=2):
sheet.range[row_index, 1].text = row_data[0]
for column_index, value in enumerate(row_data[1:], start=2):
sheet.range[row_index, column_index].numbervalue = value
# 设置表头为粗体
sheet.range["a1:n1"].style.font.isbold = true
# 自动调整列宽
sheet.range["a1:n5"].autofitcolumns()
此时工作表中已经包含完整的月度销售数据,但还没有添加趋势图。
要添加迷你图,首先需要创建一个迷你图组,然后指定迷你图类型。
下面的代码会在 n2:n5 单元格中添加折线迷你图,每个迷你图分别引用当前行的12个月销售数据。
# 创建迷你图组
sparkline_group = sheet.sparklinegroups.addgroup()
# 设置为折线迷你图
sparkline_group.sparklinetype = sparklinetype.line
# 设置迷你图颜色
sparkline_group.sparklinecolor = color.get_darkblue()
# 设置最高点颜色
sparkline_group.highpointcolor = color.get_red()
# 创建迷你图集合
sparklines = sparkline_group.add()
# 为每一行销售数据添加迷你图
for row in range(2, 6):
data_range = sheet.range[f"b{row}:m{row}"]
location = sheet.range[f"n{row}"]
sparklines.add(data_range, location)
其中:
addgroup() 用于创建一个迷你图组。sparklinetype.line 表示折线迷你图。sparklinecolor 用于设置迷你图的主颜色。highpointcolor 用于设置最高数据点的颜色。sparklines.add() 用于指定数据源和迷你图所在单元格。将同类迷你图放在同一个组中,可以统一修改它们的类型和样式。
添加迷你图后,将工作簿保存为 xlsx 文件:
# 保存工作簿
workbook.savetofile(
"sales_trends_with_sparklines.xlsx",
excelversion.version2016
)
# 释放资源
workbook.dispose()
运行完整代码后,会生成:
sales_trends_with_sparklines.xlsx
打开文件后,可以在 n 列看到每个产品对应的月度销售趋势。
下面是创建数据、添加迷你图并保存工作簿的完整代码。
from spire.xls import *
from spire.xls.common import *
# 创建工作簿
workbook = workbook()
# 获取第一个工作表
sheet = workbook.worksheets[0]
sheet.name = "monthly sales"
# 定义表头
headers = [
"product",
"jan", "feb", "mar", "apr", "may", "jun",
"jul", "aug", "sep", "oct", "nov", "dec",
"trend"
]
# 定义月度销售数据
sales_data = [
["product a", 120, 135, 128, 160, 172, 168, 190, 205, 198, 220, 235, 248],
["product b", 95, 108, 115, 110, 126, 140, 138, 150, 163, 158, 172, 185],
["product c", 180, 172, 165, 170, 158, 150, 162, 155, 148, 142, 150, 138],
["product d", 75, 92, 88, 105, 98, 115, 121, 118, 132, 140, 137, 152]
]
# 写入表头
for column_index, header in enumerate(headers, start=1):
sheet.range[1, column_index].text = header
# 写入数据
for row_index, row_data in enumerate(sales_data, start=2):
# 写入产品名称
sheet.range[row_index, 1].text = row_data[0]
# 写入月度销售额
for column_index, value in enumerate(row_data[1:], start=2):
sheet.range[row_index, column_index].numbervalue = value
# 设置表头样式
sheet.range["a1:n1"].style.font.isbold = true
# 创建折线迷你图组
sparkline_group = sheet.sparklinegroups.addgroup()
sparkline_group.sparklinetype = sparklinetype.line
# 设置迷你图颜色
sparkline_group.sparklinecolor = color.get_darkblue()
sparkline_group.highpointcolor = color.get_red()
# 创建迷你图集合
sparklines = sparkline_group.add()
# 在 n2:n5 中添加迷你图
for row in range(2, 6):
sparklines.add(
sheet.range[f"b{row}:m{row}"],
sheet.range[f"n{row}"]
)
# 自动调整列宽
sheet.range["a1:n5"].autofitcolumns()
# 保存结果文件
workbook.savetofile(
"sales_trends_with_sparklines.xlsx",
excelversion.version2016
)
# 释放资源
workbook.dispose()
如果数据之间的大小比较比连续趋势更重要,可以将迷你图类型设置为柱形。
只需要将:
sparkline_group.sparklinetype = sparklinetype.line
修改为:
sparkline_group.sparklinetype = sparklinetype.column
其余代码不需要改变。
柱形迷你图适合展示:
如果数据主要用于表示正负结果,可以使用盈亏迷你图:
sparkline_group.sparklinetype = sparklinetype.stacked
例如,下面的数据表示每个月相对于目标值的差额:
performance_data = [
12, -5, 8, 15, -3, -10,
6, 9, -4, 11, 7, -2
]
在盈亏迷你图中,正数和负数会以不同方向显示。它更适合观察结果是正还是负,而不适合比较数值之间的精确差异。
常见使用场景包括:
如果数据已经保存在现有工作簿中,不需要重新创建工作表,只需加载文件并定位数据区域。
from spire.xls import *
from spire.xls.common import *
workbook = workbook()
# 加载已有 excel 文件
workbook.loadfromfile("monthly_sales.xlsx")
# 获取第一个工作表
sheet = workbook.worksheets[0]
# 创建折线迷你图组
sparkline_group = sheet.sparklinegroups.addgroup()
sparkline_group.sparklinetype = sparklinetype.line
sparkline_group.sparklinecolor = color.get_darkblue()
# 创建迷你图集合
sparklines = sparkline_group.add()
# 添加迷你图
for row in range(2, 6):
sparklines.add(
sheet.range[f"b{row}:m{row}"],
sheet.range[f"n{row}"]
)
# 保存为新文件
workbook.savetofile(
"monthly_sales_with_sparklines.xlsx",
excelversion.version2016
)
workbook.dispose()
建议将处理结果保存为新文件,避免直接覆盖原始工作簿。
每个迷你图都包含两个区域:
b2:m2n2如果数据源和目标行对应错误,迷你图显示的趋势就可能与当前产品不匹配。
同一个迷你图组中的所有迷你图通常使用相同的图表类型和样式。
如果部分数据需要折线图,另一部分需要柱形图,应分别创建不同的迷你图组。
盈亏迷你图不会重点显示数值之间的精确大小,而是强调正值和负值。
如果需要分析连续变化或实际数值差异,应优先使用折线图或柱形图。
迷你图适合快速查看趋势,但它通常不显示:
当报表需要展示精确数值、多个数据系列或复杂对比关系时,普通 excel 图表通常更合适。
excel 迷你图可以在不占用大量工作表空间的情况下,为每行数据提供直观的趋势展示。
通过 python 可以完成以下操作:
对于月度销售、库存、成本和运营指标等表格,迷你图能够让读者快速发现增长、下降和异常波动,同时保留原有的表格布局。
到此这篇关于python实现在excel单元格中添加迷你图的完整教学的文章就介绍到这了,更多相关python excel添加迷你图内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论