Отображение диаграмм в Excel с помощью PowerShell - PullRequest
0 голосов
/ 19 ноября 2018

Я прочитал входной CSV-файл и сгенерировал диаграмму в форме PowerShell.

Это мой код: $ datasource = Import-Csv "D: \ Users \ janaja \ Desktop \ test.csv" [void] [Reflection.Assembly] :: loadWithPartialName ('System.Windows.Forms') [Пустота] [Reflection.Assembly] :: loadWithPartialName ( 'System.Windows.Forms.DataVisualization')

$datasource = "D:\Users\janaja\Desktop\test.csv"
$outputXLSX = "D:\Users\janaja\Desktop\test.xlsx"
$excel = New-Object -ComObject excel.application 

$xlChart=[Microsoft.Office.Interop.Excel.XLChartType]


$workbook = $excel.Workbooks.Add(1)
$worksheet = $workbook.worksheets.Item(1)
$TxtConnector = ("TEXT;" + $datasource)
$Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
$query = $worksheet.QueryTables.item($Connector.name)

$query.TextFileOtherDelimiter = $Excel.Application.International(5)

$query.AdjustColumnWidth = 1

$query.Refresh()
$query.Delete()

$Workbook.SaveAs($outputXLSX,51)
$i = 1 
$j=1
while($j -le 20){
$excel.Cells.Item($i, $j).Font.ColorIndex = 3
$excel.Cells.Item($i, $j).Font.Bold = $True 
$j++
}
$Chart = New-Object -TypeName 
System.Windows.Forms.DataVisualization.Charting.Chart
$Chart.Size = '600,750'
$ChartArea = New-Object -TypeName 
System.Windows.Forms.DataVisualization.Charting.ChartArea
$ChartArea.AxisX.Title = 'VM Name'
$ChartArea.AxisY.Title = 'CPU and Memory Utilization'
$ChartArea.AxisX.lnterval = '1'
$ChartArea.AxisX.LabelStyle.Enabled = $true
$ChartArea.AxisX.LabelStyle.Angle = 90
$Chart.ChartAreas.Add($ChartArea)
$Chart.Series.Add('Memory')
$Chart.Series.Add('CPU')
$Chart.Series['Memory'].ChartType = 
[System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Bar
$Chart.Series['CPU'].ChartType = 
[System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Bar

Foreach($VM in $datasource)
{
$var1 = $Chart.Series['Memory'].Points.AddXY($VM.VMName,$VM.MemoryGB)
}

Foreach($CPU in $datasource)
{
$var2 = $Chart.Series['CPU'].Points.AddXY($VM.VMName,$VM.CPU)
}

$Title = New-Object -TypeName 
System.Windows.Forms.DataVisualization.Charting.Title
$Chart.Titles.Add($Title)
$Chart.Titles[O].Text = 'VM details'
$Chart.Anchor = [System.Windows.Forms.AnchorStyles]::Bottom -bor 
[System.Windows.Forms.AnchorStyles]::Right -bor 
[System.Windows.Forms.AnchorStyles]::Top -bor 
[System.Windows.Forms.AnchorStyles]::Left
$Form = New-Object Windows.Forms.Form
$Form.Text= "VM Memory and CPU usage Chart"
$Form.Width = 600
$Form.Height = 600
$Form.controls.add($Chart)
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()
$Chart.Savelmage($Env:USERPROFILE + "\Desktop\Chart.png", "PNG")

Этот код преобразует файл из формата CSV в формат Excel, а затем считывает данные файла CSV для отображения диаграммы в форме Powershell. Как сгенерировать тот же график, который берет только 3 значения столбца из 14 столбцов и отображать кластеризованную гистограмму?

1 Ответ

0 голосов
/ 19 ноября 2018

Вы не можете вставлять изображения в файлы CSV так, как вы, вероятно, собираетесь, потому что CSV - это текст в формате открытого текста. Вы можете встраивать путь к файлу изображения или кодировать изображение (например, используя кодировку base64) и включать закодированные данные. Но даже с последним вам все равно понадобится программа просмотра, которая будет декодировать закодированные данные и отображать их как изображение.

По сути, то, что вы спрашиваете, невозможно.

Однако вы можете использовать ImportExcel , чтобы создать электронную таблицу Excel из существующего файла CSV. Модуль также поддерживает создание диаграмм Excel, которые должны воспроизводить диаграмму, аналогичную той, которую вы создаете с вашим изображением. Вы также можете просто вставить файл изображения, но я не уверен, что это возможно. Для этого вам может понадобиться более старый API-интерфейс Excel COM, который поставляется вместе с Office.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...