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

时间:2016-01-12 18:30:49

标签: excel powershell charts legend named-ranges

我在这里读了thread关于在Excel图表中添加多个系列帮助我很多,但我还需要在图表上的同一行(系列)中添加3个信息范围。登记/> 我的目标是从另一个Excel文件中获取信息,将其移动到带有图表的文件中,并将信息(在第一张纸上存储为普通文本)添加到图表中。
我设法创建一个包含两个范围的系列,使用它:

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

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

  

得到“范围”的异常:“无法找到”范围“的过载和   参数计数:“3”。“在   C:\ Users \ graciela_robert \ Desktop \ PerfTool \ script.ps1:57 char:1   + $ chart.SeriesCollection(1).Values = $ WorksheetTool1.Range(“D10:D11”,“D20:D24”,“D ...   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:NotSpecified:(:) [],GetValueInvocationException       + FullyQualifiedErrorId:CatchFromBaseParameterizedPropertyAdapterGetValue

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

另外,我正在尝试使用

将图表图例移到底部
divSender

但它不起作用。我也试过“#$ chart.Legend = - 4107”,我读了here,但它也不起作用。没有错误,只是没有任何改变。

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

1 个答案:

答案 0 :(得分:0)

为此做出实际答案...您调用的SeriesCollection方法会返回SeriesCollection个集合。该集合的图表上的每个范围都有一个对象,该对象几乎由Formula属性定义。因此,我们假设以下内容:enter image description here
对于您的图表,我们可以使用以下内容建立所有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以使其显示为我们想要的(假设您的工作表名称为&#39;工具1&#39;如暗示通过您的变量名称):

$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)'

现在我们有一个图表,显示所有四个系列,包含我们的图例,并标记为适当的:
enter image description here

编辑:好的,我看到了您的示例,并在Excel中复制了它。从我所能说的就足够简单了。这就是我的所作所为。我在PowerShell中将Excel作为comobject打开并创建了一个空白工作簿。我将其显示为可见,并以随机名称添加,并键入示例图表中列出的标题。然后我在PowerShell中使用get-random一些优点填充数据,并手动创建图表。这就是我最终得到的结果:enter image description here
因此,这与你给出的图表足够接近,我想是一个例子。那么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名成员,每人一名。它们的格式与我之前提到的一样。