Openpyxl 没有显示第二张图

Openpyxl not showing second graph

编辑:已解决,解决方案在下面的答案中。

我有一个用 openpyxl 创建的图形,它有两个 y 轴共享一个 DateAxis。虽然第一个选择的数据显示在图表上,但第二个没有。图表底部还有一条奇怪的灰线,以前没有。我认为这只是我在某处遗漏的一个小错误,但我看不到在哪里。特别是考虑到我已经正确定义了我的单元格范围。我可能做错了什么?

import openpyxl
from openpyxl import Workbook, chart
from openpyxl.chart import LineChart, Reference, Series
from openpyxl.chart.axis import DateAxis
from datetime import date, datetime, timedelta, time
ws2 = wb['sheet2']
dates = chart.Reference(ws2, min_col=1, min_row=2, max_row=sheet.max_row)
vBat = chart.Reference(ws2, min_col=2, min_row=1, max_col=2, max_row=sheet.max_row)
qBat = chart.Reference(ws2, min_col=3, min_row=1, max_col=3)

c1 = chart.LineChart()
c1.title = "SLA Discharge - 5.5A: V_BAT"
c1.style = 12
c1.x_axis.majorTimeUnit = "days"
c1.x_axis = chart.axis.DateAxis()
c1.x_axis.title = "Time"
c1.x_axis.crosses = "min"
c1.x_axis.majorTickMark = "out"
c1.x_axis.number_format = 'd-HH-MM-SS'
c1.add_data(vBat, titles_from_data=True)
c1.set_categories(dates)
c1.y_axis.title = "Battery Voltage"
c1.y_axis.crossAx = 500
c1.y_axis.majorGridlines = None


c2 = chart.LineChart()
c2.x_axis.axId = 500 # same as c1
c2.add_data(qBat, titles_from_data=True, from_rows=True)
c2.set_categories(dates)
c2.y_axis.axId = 200
c2.y_axis.title = "Qbat Percentage"
c2.y_axis.crossAx = 500

c1.y_axis.crosses = "max"
c1 += c2


s1 = c1.series[0]
s1.graphicalProperties.line.solidFill = "BE4B48"
s1.graphicalProperties.line.width = 25000 # width in EMUs.
s1.smooth = True # Make the line smooth
s2 = c2.series[0]
s2.graphicalProperties.line.solidFill = "48BBBE"
s2.graphicalProperties.line.width = 25000 # width in EMUs.
s2.smooth = True # Make the line smooth
ws2.add_chart(c1, "D5")

有趣的是,

vBat = chart.Reference(ws2, min_col=2, min_row=1, max_col=2, max_row=sheet.max_row)

很好。然而,对 qBat 做同样的事情:

qBat = chart.Reference(ws2, min_col=3, min_row=1, max_col=3, max_row=sheet.max_row)

"corrupts" 工作簿并在打开时显示错误消息并且不打印任何图表。从这两行中删除 max_row=sheet.max_row 会产生不正确的 DateAxis,其中只有两个点,它们都是 time 列中的前两个值。

首先,在 c2.add_data(qBat, titles_from_data=True, from_rows=True) 中,删除 from_rows=True

然后,将 qBat 更改为:

qBat = chart.Reference(ws2, min_col=3, min_row=1, max_col=3, max_row=sheet.max_row)