2011-06-14 83 views
0

我正在写作业的一些代码,我需要在Excel中创建一个简单的柱状图。今天下午,我发现了win32com(顺便提一下,这是一个令人惊叹的工具),但是我一直都缺乏相关的文档,或者我没有找到它的运气。^^Python - 额外的Excel图表系列与win32com

我在玩图表,我想我已经设法做到了我想要的,只有一点例外:我写的函数总是创建2列。

这是我的本钱:

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 

我创建了一系列新的图表里面,它包含了我需要的所有信息。但是,当我运行该脚本时,最终得到一个带有4列的Excel图表,并带有相同的信息(成对)。我尽我所能,但我无法找到在X轴上创建第二个系列值的原因......

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

回答

1

通过观察记录在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 

这已被简化为最低限度。 我用Excel 2003在Python 2.7中测试了这个。

+0

太棒了!是的,这完美地工作^^现在我可以使用Excel创建的系列,而不是创建一个新的图表。非常感谢! – dhcarmona 2011-06-16 15:35:30