python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Excel添加迷你图

Python实现在Excel单元格中添加迷你图的完整教学

作者:SunnyDays1011

Excel 迷你图是一种嵌入单元格的小型图表,它本文教你用Python批量添加Excel迷你图,包括折线图、柱形图和盈亏图,轻松实现销售报表和库存清单的趋势可视化,快速掌握迷你图设置技巧,让数据分析更高效

在销售报表、库存清单或运营数据中,我们经常需要观察一组数据随时间的变化趋势。

直接插入折线图虽然直观,但当表格中包含多个产品、部门或项目时,为每一行数据分别创建图表会占用大量空间,也会让工作表变得拥挤。

Excel 迷你图是一种嵌入单元格的小型图表。它可以直接显示在数据行旁边,用较小的空间呈现增长、下降和波动趋势。

本文将介绍如何使用 Python:

什么是 Excel 迷你图

迷你图与普通 Excel 图表的主要区别在于,它通常只显示在一个单元格中。

例如,下面是一组产品的月度销售数据:

产品1月2月3月4月趋势
产品A120135128160迷你图
产品B95110108126迷你图

可以在每行数据右侧放置一个迷你图,让读者不需要逐个比较数字,就能快速判断数据的整体变化方向。

常见的迷你图包括三种类型:

Spire.XLS for Python 提供了折线、柱形和盈亏三种迷你图类型,并可以通过迷你图组统一管理其类型、颜色和数据范围。

安装 Excel 处理库

本文使用 Spire.XLS for Python 创建和编辑 Excel 文件。

可以通过 pip 安装:

pip install Spire.XLS

安装完成后,在 Python 代码中导入相关类:

from spire.xls import *
from spire.xls.common import *

该包当前可以通过 PyPI 安装,导入模块名称为 spire.xls

使用 Python 创建示例数据

下面先创建一个包含四种产品月度销售额的工作表。

数据区域为 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()

此时工作表中已经包含完整的月度销售数据,但还没有添加趋势图。

使用 Python 添加折线迷你图

要添加迷你图,首先需要创建一个迷你图组,然后指定迷你图类型。

下面的代码会在 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)

其中:

将同类迷你图放在同一个组中,可以统一修改它们的类型和样式。

保存 Excel 文件

添加迷你图后,将工作簿保存为 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
]

在盈亏迷你图中,正数和负数会以不同方向显示。它更适合观察结果是正还是负,而不适合比较数值之间的精确差异。

常见使用场景包括:

为现有 Excel 文件添加迷你图

如果数据已经保存在现有工作簿中,不需要重新创建工作表,只需加载文件并定位数据区域。

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()

建议将处理结果保存为新文件,避免直接覆盖原始工作簿。

使用时需要注意的问题

数据区域和目标单元格应一一对应

每个迷你图都包含两个区域:

如果数据源和目标行对应错误,迷你图显示的趋势就可能与当前产品不匹配。

同一组中的迷你图共用类型和样式

同一个迷你图组中的所有迷你图通常使用相同的图表类型和样式。

如果部分数据需要折线图,另一部分需要柱形图,应分别创建不同的迷你图组。

盈亏图主要关注正负关系

盈亏迷你图不会重点显示数值之间的精确大小,而是强调正值和负值。

如果需要分析连续变化或实际数值差异,应优先使用折线图或柱形图。

迷你图不能代替完整图表

迷你图适合快速查看趋势,但它通常不显示:

当报表需要展示精确数值、多个数据系列或复杂对比关系时,普通 Excel 图表通常更合适。

总结

Excel 迷你图可以在不占用大量工作表空间的情况下,为每行数据提供直观的趋势展示。

通过 Python 可以完成以下操作:

对于月度销售、库存、成本和运营指标等表格,迷你图能够让读者快速发现增长、下降和异常波动,同时保留原有的表格布局。

到此这篇关于Python实现在Excel单元格中添加迷你图的完整教学的文章就介绍到这了,更多相关Python Excel添加迷你图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文