Ruby WIN32OLE excel图表seriescollection值

我正在尝试更改Excel(实际上是PowerPoint)图表的值。 我试图通过传递一个数组,但它似乎并没有工作。 虽然正如本页所述,它应该工作…: http : //msdn.microsoft.com/en-us/library/office/ff746833.aspx

那么我现在的代码如何呢?

require 'win32ole' mspp_app = WIN32OLE.new("Powerpoint.Application") mspp = mspp_app.Presentations.Open(pathToFile) slide = mspp.Slides(1) shapes = slide.shapes chartshape = shapes(3) #the chart happens to be shape n°3 chart = chartshape.chart # now get the seriescollection sc = chart.SeriesCollection sc3 = sc.Item(3) values = sc3.values #returns the current values as an array example: [1.0, 1.0, 5.0, 2.0] # now set the values sc3.values = [2.0, 2.0, 5.0, 1.0] # returns no error # see if the values are set values = sc3.values # returns an empty Array [] 

任何人之前尝试过?

为了操作图表数据,您必须更改底层的工作表:

 ws = myChart.Chart.ChartData.Workbook.Worksheets(1) ws.Range("A2").Value = "Coffee" ws.Range("A3").Value = "Soda" ws.Range("A4").Value = "Tea" ws.Range("A5").Value = "Water" ws.Range("B1").Value = "Amount" # used as label for legend ws.Range("B2").Value = "1000" ws.Range("B3").Value = "2500" ws.Range("B4").Value = "4000" ws.Range("B5").Value = "3000" 

如果维度已更改,则更改SourceData-Range非常重要。 注意Excel中的不同概念:“ = Tabelle1!A1:B5 ”而不是“A1:B5”。

对于英文办公室版本将“Tabelle1”更改为“Sheet1”

 myChart.Chart.SetSourceData("=Tabelle1!A1:B5") myChart.Chart.ChartData.Workbook.Close 

之后不要忘记closures工作表。