Excel迷你图从2010版开始支持,它不是普通图表对象,而是挂在工作表上的迷你图组,一组迷你图共享样式。用Python生成报表时,迷你图可以像单元格格式一样批量写入。本文围绕Spire.XLS for Python,梳理折线、柱形和盈亏迷你图的创建、样式设置、空单元格处理与常见注意事项。访问SparklineGroups前必须显式设置workbook.Version = ExcelVersion.Version2013,否则会报错。
环境准备:安装Spire.XLS并导入模块。
- pip install Spire.XLS
- from spire.xls import *
- from spire.xls.common import *
复制代码
创建迷你图组:迷你图由组和成员两层对象组成。先用SparklineGroups.AddGroup(SparklineType.Line)创建组,再用group.Add()得到迷你图集合,最后用Add(dataRange, location)把单行数据区域绑定到单行位置单元格。同一个组里的迷你图共享样式,按组设置颜色比逐格操作更省事。下面的示例在H列放折线迷你图,在I列放柱形迷你图。
- from spire.xls import *
- from spire.xls.common import *
- workbook = Workbook()
- workbook.Version = ExcelVersion.Version2013
- workbook.CreateEmptySheets(1)
- sheet = workbook.Worksheets[0]
- months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
- products = {
- 'Alpha': [10, 12, 9, 15, 18, 21],
- 'Beta': [8, 9, 7, 10, -2, 12],
- 'Gamma': [20, 18, 22, 25, 23, 26],
- 'Delta': [5, 7, 6, 9, 8, 11],
- 'Epsilon': [15, 14, 16, 13, 17, 19],
- }
- sheet.Range['A1'].Value = 'Product'
- for i, month in enumerate(months):
- sheet.Range[1, i + 2].Value = month
- sheet.Range['H1'].Value = 'Trend'
- sheet.Range['I1'].Value = 'Bars'
- for r, (name, values) in enumerate(products.items(), start=2):
- sheet.Range[r, 1].Value = name
- for c, value in enumerate(values):
- sheet.Range[r, c + 2].NumberValue = value
- line_group = sheet.SparklineGroups.AddGroup(SparklineType.Line)
- line_sparklines = line_group.Add()
- for r in range(2, 7):
- line_sparklines.Add(sheet.Range[r, 2, r, 7], sheet.Range[r, 8])
- column_group = sheet.SparklineGroups.AddGroup(SparklineType.Column)
- column_sparklines = column_group.Add()
- for r in range(2, 7):
- column_sparklines.Add(sheet.Range[r, 2, r, 7], sheet.Range[r, 9])
- sheet.SetColumnWidth(8, 14)
- sheet.SetColumnWidth(9, 12)
- workbook.SaveToFile('SparklineDashboard.xlsx', ExcelVersion.Version2013)
- workbook.Dispose()
复制代码
设置线条颜色与标记点:加载文件后通过索引取出组。SparklineColor设置折线或柱形颜色,LineWeight控制线宽;ShowMarkers打开数据点标记,MarkersColor指定标记颜色;ShowHighPoint和ShowLowPoint分别突出最高点和最低点,对应HighPointColor与LowPointColor。高点和低点默认不显示,需要显式打开,适合让数据线保持低调、极值一眼可见。柱形组还可以用ShowNegativePoint和NegativePointColor单独标红负值,用ShowFirstPoint、ShowLastPoint标记起点与最新值,用ShowHorizontalAxis在零值位置画横轴。
- workbook = Workbook()
- workbook.LoadFromFile('SparklineDashboard.xlsx')
- sheet = workbook.Worksheets[0]
- line_group = sheet.SparklineGroups[0]
- line_group.SparklineColor = Color.get_Blue()
- line_group.LineWeight = 1.5
- line_group.ShowMarkers = True
- line_group.MarkersColor = Color.get_Red()
- line_group.ShowHighPoint = True
- line_group.HighPointColor = Color.get_Green()
- line_group.ShowLowPoint = True
- line_group.LowPointColor = Color.get_Red()
- bars = sheet.SparklineGroups[1]
- bars.SparklineColor = Color.get_Blue()
- bars.ShowNegativePoint = True
- bars.NegativePointColor = Color.get_Red()
- bars.ShowFirstPoint = True
- bars.FirstPointColor = Color.get_Orange()
- bars.ShowLastPoint = True
- bars.LastPointColor = Color.get_Purple()
- bars.ShowHorizontalAxis = True
- bars.HorizontalAxisColor = Color.get_Gray()
- workbook.SaveToFile('SparklineStyles.xlsx', ExcelVersion.Version2013)
- workbook.Dispose()
复制代码
处理空单元格:报表数据可能有缺失月份。迷你图遇到空单元格时,可以用组的EmptyCellsType决定断开还是跨过空白连线。SparklineEmptyCells.Gaps在空缺处留出断口,适合强调数据缺失;SparklineEmptyCells.Line把空缺两侧的点直接连起来,趋势看起来连续,但会掩盖缺失。两种设置只影响显示,不修改单元格内容。
- gaps = sheet.SparklineGroups.AddGroup(SparklineType.Line)
- gaps.EmptyCellsType = SparklineEmptyCells.Gaps
- gaps_sl = gaps.Add()
- for r in range(2, 5):
- gaps_sl.Add(sheet.Range[r, 2, r, 7], sheet.Range[r, 8])
- line = sheet.SparklineGroups.AddGroup(SparklineType.Line)
- line.EmptyCellsType = SparklineEmptyCells.Line
- line_sl = line.Add()
- for r in range(2, 5):
- line_sl.Add(sheet.Range[r, 2, r, 7], sheet.Range[r, 9])
复制代码
盈利与亏损迷你图:SparklineType.Stacked绘制盈亏柱,正值向上、负值向下,适合按月对比输赢或收支。配合NegativePointColor可以把亏损月份染成红色。
- group = sheet.SparklineGroups.AddGroup(SparklineType.Stacked)
- group.SparklineColor = Color.get_Blue()
- group.NegativePointColor = Color.get_Red()
- sparklines = group.Add()
- for r in range(2, 5):
- sparklines.Add(sheet.Range[r, 2, r, 7], sheet.Range[r, 8])
复制代码
实用技巧与排查要点:先设置workbook.Version,必须在访问SparklineGroups之前完成;同一组的迷你图共享颜色和标记设置,建议按组设置样式;组用索引访问,sheet.SparklineGroups[0]、[1]按创建顺序取出;Add(dataRange, location)中数据区域与位置都是单行区域,绑定时保持行数一致;Gaps与Line只影响显示,不修改单元格内容;ShowNegativePoint配合NegativePointColor让异常月份自动突出;每个工作簿用完调用Dispose()释放资源。
结论:用SparklineGroups.AddGroup()按折线、柱形或盈亏类型建组,用Add(dataRange, location)把每行数据绑定到单元格;用SparklineColor、LineWeight、ShowMarkers及各标记点颜色控制外观;用ShowNegativePoint、ShowFirstPoint、ShowLastPoint和ShowHorizontalAxis突出关键数据;用EmptyCellsType决定缺失值断开还是连线。这些设置保存在工作簿里,生成报表时一次写入,打开即可阅读。 |