Создайте диаграмму Excel с дополнительным яксом в powershell - PullRequest
0 голосов
/ 05 октября 2018

Я хочу создать таблицу Excel по сценарию Powershell, но с двумя группами рядов данных - каждая на отдельном яксисе.Я смог создать диаграмму, но с одним яксисом с кодом:

function drawchart{
param($value1,$value2=$null,$items)

$excelAxes = [Microsoft.Office.Interop.Excel.XlAxisType]
$xl.SheetsInNewWorkbook = 2
$wb = $xl.Workbooks.Add()
$wb.worksheets("Sheet1").name = "Raw Data"
$wb.worksheets("Sheet2").name = "Graphs"

$wsdata = $wb.worksheets.item("Raw Data")
$wschart = $wb.worksheets.item("Graphs")

$chart = $wschart.Shapes.AddChart().Chart
$currentseries1 = $chart.SeriesCollection().NewSeries
$currentseries2 = $chart.SeriesCollection().NewSeries

foreach($item in $items) # $items is a collection with custom objects
{
    if(Where-Object -InputObject $item -Property name_ -match -value "$($value1)")
    {
        $currentseries1 = $chart.SeriesCollection().add($wsdata.Range($wsdata.Cells(1,$item.indexStart), $wsdata.Cells(20,$item.indexEnd))
        $currentseries1.name = $item.name_
        $currentseries1.xvalues= $wsdata.Range($wsdata.Cells(1,1), $wsdata.Cells(20,1)) 
        $currentseries1.AxisGroup = 1
    }
    if($value2 -ne $null -and (Where-Object -InputObject $item -Property name_ -match -value "$($value2)"))
    {
        $currentseries2 = $chart.SeriesCollection().add($wsdata.Range($wsdata.Cells(1,$item.indexStart), $wsdata.Cells(20,$item.indexEnd))
        $currentseries2.name = $item.name_
        $currentseries2.xvalues= $wsdata.Range($wsdata.Cells(1,1), $wsdata.Cells(20,1)) 
        $currentseries1.AxisGroup = 2
    }
}

$chart.HasTitle = $true
$chart.ChartTitle.Text = "My chart"
$chart.ChartType = 4
$chart.ChartArea.Height = 50
$chart.ChartArea.Width = 100
$chart.ChartArea.Top = 10
$chart.ChartArea.Left = 10
}

1 Ответ

0 голосов
/ 09 октября 2018

Я нашел источник проблемы.Это было:

$chart.ChartType = 4

линия.Это вызывает сброс серии AxisGroup, потому что он был установлен после установки ряда данных.Более того,

$currentseries1 = $chart.SeriesCollection().NewSeries
$currentseries2 = $chart.SeriesCollection().NewSeries

не нужны и могут быть удалены.

Наконец, рабочий код:

function drawchart{
param($value1,$value2=$null,$items)

$excelAxes = [Microsoft.Office.Interop.Excel.XlAxisType]
$xl.SheetsInNewWorkbook = 2
$wb = $xl.Workbooks.Add()
$wb.worksheets("Sheet1").name = "Raw Data"
$wb.worksheets("Sheet2").name = "Graphs"

$chart.ChartType = 4

$wsdata = $wb.worksheets.item("Raw Data")
$wschart = $wb.worksheets.item("Graphs")

$chart = $wschart.Shapes.AddChart().Chart

foreach($item in $items) # $items is a collection with custom objects
{
    if(Where-Object -InputObject $item -Property name_ -match -value "$($value1)")
    {
        $currentseries1 = $chart.SeriesCollection().add($wsdata.Range($wsdata.Cells(1,$item.indexStart), $wsdata.Cells(20,$item.indexEnd))
        $currentseries1.name = $item.name_
        $currentseries1.xvalues= $wsdata.Range($wsdata.Cells(1,1), $wsdata.Cells(20,1)) 
        $currentseries1.AxisGroup = 1
    }
    if($value2 -ne $null -and (Where-Object -InputObject $item -Property name_ -match -value "$($value2)"))
    {
        $currentseries2 = $chart.SeriesCollection().add($wsdata.Range($wsdata.Cells(1,$item.indexStart), $wsdata.Cells(20,$item.indexEnd))
        $currentseries2.name = $item.name_
        $currentseries2.xvalues= $wsdata.Range($wsdata.Cells(1,1), $wsdata.Cells(20,1)) 
        $currentseries2.AxisGroup = 2
    }
}

$chart.HasTitle = $true
$chart.ChartTitle.Text = "My chart"
$chart.ChartArea.Height = 50
$chart.ChartArea.Width = 100
$chart.ChartArea.Top = 10
$chart.ChartArea.Left = 10
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...