繁体   English   中英

使用Powershell在Excel图表上添加两个以上的数据范围

[英]Add more than two ranges of data on an Excel chart with powershell

我在这里读到一个有关在Excel图表上添加多个系列的帖子,这对我有很大帮助,但是我还需要向图表上的同一条线(系列)添加3个信息范围。
我的目标是从另一个Excel文件中获取信息,将其移动到带有图表的文件中,然后将信息(作为普通文本存储在第一张工作表中)添加到图表中。
我设法用两个范围创建一个系列:

$xlChartType=[Microsoft.Office.Interop.Excel.XLChartType] 
$XlLegendPosition=[Microsoft.Office.Interop.Excel.XlLegendPosition]

$chart=$WorksheetTool2.Shapes.AddChart().Chart
$chart.chartType=$xlChartType::xlLineMarkers 
$chart.SeriesCollection().NewSeries.Invoke() 
$chart.SeriesCollection(1).Values = $WorksheetTool1.Range("D10:D11","D20:D24") 
$chart.SeriesCollection(1).Name = "=""First""

但我需要添加第三个范围,如果添加第三个范围,我得到的错误是:

“获取” Range“的异常:”找不到“ Range”的重载,并且参数计数为“ 3”。“ 在C:\\ Users \\ graciela_robert \\ Desktop \\ PerfTool \\ script.ps1:57 char:1 + $ chart.SeriesCollection(1).Values = $ WorksheetTool1.Range(“ D10:D11”,“ D20:D24”,“ D ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + CategoryInfo:未指定:(:) [],GetValueInvocationException + FullyQualifiedErrorId:CatchFromBaseParameterizedPropertyAdapterGetValue

有谁知道如何在此图表中添加第三个范围?

另外,我正在尝试通过使用将图例移至底部

$XlLegendPosition=[Microsoft.Office.Interop.Excel.XlLegendPosition]
$chart.Legend=$XlLegendPosition::xlLegendPositionBottom

但这是行不通的。 我还尝试了在这里阅读的“#$ chart.Legend =-4107”,但是它也不起作用。 没有错误,没有任何变化。

对不起,两个问题! 谢谢!

为了对此做出实际答案,您调用的SeriesCollection方法将返回SeriesCollection集合。 该集合为图表上的每个范围都有一个对象,该对象几乎由Formula属性定义。 因此,让我们假设以下内容: 在此处输入图片说明
对于您的图表,我们可以使用以下内容建立所有4条线:

$chart.SeriesCollection().add($WorksheetTool1.Range("B2:E2")
$chart.SeriesCollection().add($WorksheetTool1.Range("B3:E3")
$chart.SeriesCollection().add($WorksheetTool1.Range("B4:E4")
$chart.SeriesCollection().add($WorksheetTool1.Range("I1:L1")

那为我们在图表上画了线。 它不会放入图例,也不会在底部填入日期,但会放入我们的行并自动生成侧面的比例。 因此,当我们查看SeriesCollection时,它给了我们4个对象,我们只需要对它们做一些固定即可。 现在,正如我之前提到的,每个属性的Formula属性都包含我们需要的所有信息。 其布局如下:

=SERIES(<Series Title>,<Series Index Points>,<Range>,Index)

因此,在这里放置一些上下文,我们数组中的第一个对象应具有以下Formula以使其像我们希望的那样显示(假设您的工作表名称为“ Tool1”,如变量名所暗示):

$chart.SeriesCollection(1).Formula = '=SERIES(Tool1!$A$2,Tool1!$B$1:$E$1,Tool1!$B$2:$E$2,1)'

然后其余的视情况...

$chart.SeriesCollection(2).Formula = '=SERIES(Tool1!$A$3,Tool1!$B$1:$E$1,Tool1!$B$3:$E$3,2)'
$chart.SeriesCollection(3).Formula = '=SERIES(Tool1!$A$4,Tool1!$B$1:$E$1,Tool1!$B$4:$E$4,3)'
$chart.SeriesCollection(4).Formula = '=SERIES(Tool1!$H$1,Tool1!$B$1:$E$1,Tool1!$I$1:$L$1,4)'

现在,我们有了一个图表,显示了所有四个系列以及我们的图例,并有适当的标签:
在此处输入图片说明

编辑:好的,我看到了您的示例,并将其复制到Excel中。 就我所知,这很简单。 这就是我所做的。 我在PowerShell中将Excel作为Comobject打开,并创建了一个空白工作簿。 我使它可见,并添加了一些随机名称,并键入了示例图表中列出的标题。 然后,我在PowerShell中填充了具有一定get-random的数据,并手动创建了图表。 我最终得到的是: 在此处输入图片说明
因此,这与我作为示例给出的图表足够接近。 那么,PowerShell对公式显示了什么? 这是我得到的:

=SERIES(Sheet1!$A$2,Sheet1!$B$1:$X$1,Sheet1!$B$2:$X$2,1)
=SERIES(Sheet1!$A$3,Sheet1!$B$1:$X$1,Sheet1!$B$3:$X$3,2)
=SERIES(Sheet1!$A$4,Sheet1!$B$1:$X$1,Sheet1!$B$4:$X$4,3)
=SERIES(Sheet1!$A$5,Sheet1!$B$1:$X$1,Sheet1!$B$5:$X$5,4)
=SERIES(Sheet1!$A$6,Sheet1!$B$1:$X$1,Sheet1!$B$6:$X$6,5)

SeriesCollection()有5个成员,每个成员一个。 正如我之前提到的,它们的格式是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM