Powershell Excel Chart - 从现有图表中获取数据系列

时间:2015-09-30 21:03:28

标签: excel vba powershell charts

我有一个Powershell脚本,它将工作表(带有自定义双轴图表)从一个工作簿复制到另一个工作簿,然后用数据填充新副本。该部分脚本工作正常,但我试图更改现有图表中的数据系列,我不知道要更改数据系列的字段。

我可以更改现有图表的图表标题和图例标签,没有任何问题。我已尝试使用$ChartTemplate.SeriesCollection(1).Values字段和$ChartTemplate.SeriesCollection(1).XValues以及$ChartTemplate.SeriesCollection().NewSeries.Invoke()命令,但我没有成功。

是否有人知道用于编辑自定义双轴折线图(=SERIES(Template!$G$1,Template!$A$2:$A$112,Template!$G$2:$G$112,4)的现有数据系列的Powershell语法?

以下是我通过Google搜索获得的Powershell代码:

$file1 = $global:ChartTemplateXlsx    # source's fullpath
$file2 = $Path                        # destination's fullpath
$xl = new-object -c excel.application 
$xl.Visible = $False                  # dont display the spreadsheet
$xl.displayAlerts = $false            # don't prompt the user
$wb1 = $xl.workbooks.open($file1, $null, $true)   # open source, readonly
$wb = $xl.workbooks.open($file2)      # open target workbook/worksheet
$sh1_wb = $wb.sheets.item(1)          # 1st sheet in destination workbook
$sheetToCopy = $wb1.sheets.item('Template')   # source sheet to copy
$sheetToCopy.copy($sh1_wb)   # copy source sheet to destination workbook

$ws = $wb.ActiveSheet                        # set the worksheet

$ChartTemplate = $ws.chartobjects(1).chart   # obtain the existing chart
$ChartTemplate.HasTitle = $true              # turn on chart title
$ChartTemplate.ChartTitle.Text = "Test Chart" # set a new chart title

$ChartTemplate.SeriesCollection(1).Name = "=""Test01"""
$ChartTemplate.SeriesCollection(2).Name = "=""Test02"""
$ChartTemplate.SeriesCollection(3).Name = "=""Test03"""
$ChartTemplate.SeriesCollection(4).Name = "=""Test04"""

$wb1.close($false)               # close source workbook w/o saving
$wb.close($true)                 # close and save destination workbook
$xl.quit()
spps -n excel

顺便说一下,我正在使用一个单独的工作簿和图表,以便用户可以创建自己的图表模板,然后我将用数据填充它。

1 个答案:

答案 0 :(得分:0)

您要查找的属性是FormulaFormulaLocal属性。它们似乎是彼此重复的。如果更新一个不起作用,请尝试另一个,或者只设置两个。

$ChartTemplate.SeriesCollection(1).Formula = '=SERIES(Template!$G$1,Template!$A$2:$A$112,Template!$G$2:$G$112,4)'
$ChartTemplate.SeriesCollection(1).FormulaLocal = '=SERIES(Template!$G$1,Template!$A$2:$A$112,Template!$G$2:$G$112,4)'