Python - 使用win32com添加额外的Excel图表系列

0 投票
1 回答
6317 浏览
提问于 2025-04-16 19:30

我正在为一个作业写代码,需要在Excel中创建一个简单的柱状图。今天下午我发现了win32com(顺便说一下,这个工具真不错),但是我一直在为找不到相关文档而苦恼,或者说我运气不好,找不到资料 ^^

我在尝试制作图表,我觉得我已经做到了我想要的,唯一的小问题是:我写的函数总是会创建两组柱子。

这是我目前的代码:

xlBook = xlApp.Workbooks.Add()

xlSheet = xlBook.Sheets(1)
xlSheet.Name = "Algoritmos de Busqueda"
xlSheet.Cells(1,1).Value="Secuencial"
xlSheet.Cells(2,1).Value="Binaria"
xlSheet.Cells(1,2).Value="32"
xlSheet.Cells(2,2).Value="32"

chart = xlApp.Charts.Add()
chart.Name= "Grafico "+xlSheet.Name
series = chart.SeriesCollection().NewSeries()
valoresx=xlSheet.Range("A1:A2")
valoresy=xlSheet.Range("B1:B2")
series.XValues= valoresx
series.Values= valoresy
series.Name= "Algoritmos"
xAxis= chart.Axes()[0]
yAxis= chart.Axes()[1]
xAxis.HasMajorGridlines = True
yAxis.HasMajorGridlines = True

我在图表中创建了一个新的数据系列,里面包含了我需要的所有信息。然而,当我运行这个脚本时,Excel图表中却出现了4根柱子,里面的信息是一样的(成对出现)。我已经尽力去查找,但就是找不到是什么导致X轴上出现了这第二组值...

非常感谢任何帮助 ^^ 谢谢!

1 个回答

2

通过观察在Excel中录制一个宏的过程,我们可以看到这个宏执行的动作和我们在Python中要做的很相似。我们发现其实并不需要像下面这样创建一个新的系列:

series = chart.SeriesCollection().NewSeries()

我可以简单地引用一个已经存在的系列。

series = chart.SeriesCollection(1)

下面的代码在我的电脑上似乎能达到我想要的效果。

import win32com.client
xlApp = win32com.client.Dispatch('Excel.Application')

xlBook = xlApp.Workbooks.Add()

xlSheet = xlBook.Sheets(1)
xlSheet.Name = "Algoritmos de Busqueda"
xlSheet.Cells(1,1).Value="Secuencial"
xlSheet.Cells(2,1).Value="Binaria"
xlSheet.Cells(1,2).Value="32"
xlSheet.Cells(2,2).Value="32"

chart = xlApp.Charts.Add()
chart.Name= "Grafico "+xlSheet.Name
series = chart.SeriesCollection(1)
series.XValues= xlSheet.Range("A1:A2")
series.Values= xlSheet.Range("B1:B2")
series.Name= "Algoritmos"
chart.Axes()[0].HasMajorGridlines = True

这段代码已经简化到最基本的部分。我是在Python 2.7和Excel 2003环境下测试的。

撰写回答