Powershell eine bestehende Excel Chart beabreiten
Hallo Zusammen
Habe ein Code erstellt der mir in Excel die Daten speichert, dann eine neue Chart erstellt und mit den Daten befüllt.
Die Daten werden immer ins gleiche Excel File fortlaufen geschrieben, und somit wollte ich eigentlich das die Chart Tabelle aktualisiert wird.
Doch leider erstellt er mir beim jedem Aufruf immer eine neue, hätte hier jemand eine Lösung ?
Grüße
#=========================================================================
#=========================================================================
Write-Verbose "Filtern der User nach Zeit und Ergebniss in Excel schreiben..."
$varDate = $varLastLogon | select-object @{Name="lastlogon"; Expression = {[datetime]::fromfiletime($_.Properties["lastlogon"])}} | where-object {$_.lastlogon -gt $DateTime1 -and $_.lastlogon -lt $DateTime2}
If ($varDate.Count -eq $Null) {
#=========================================================================
#=========================================================================
$introw = $ObjExcelSheet.UsedRange.Rows.Count + 1
$ObjExcelSheet.cells.item($introw, 1) = "$DateTime1 und $DateTime2"
$ObjExcelSheet.cells.item($introw, 2) = "0"
$ObjExcelSheet.range($ObjExcelSheet.cells.item(1,1),$ObjExcelSheet.cells.item(1,2)).Font.Bold = $true
$ObjExcelSheet.UsedRange.EntireColumn.AutoFit();
#=========================================================================
#=========================================================================
$ObjExcelSheet.range("A1").select()
$ObjExcel.Selection.CurrentRegion.Select()
$ObjExcelFile.charts.add() | out-null
$worksheet = $ObjExcelFile.Worksheets.Item(1)
$chart = $worksheet.chartobjects(1).chart
$ObjExcelFile.ActiveChart.Location(2,$($ObjExcelSheet.name)) | out-null
$ObjExcelFile.ActiveChart.chartType = 65
$ObjExcelFile.ActiveChart.seriescollection(1).border.LineStyle = -4118
#=========================================================================
#=========================================================================
$ObjExcelFile.ActiveChart.hasTitle=$true #titel erscheint oder nicht , #Überschrift
$ObjExcelFile.ActiveChart.ChartTitle.Text = "Auswertung LastLogon"
#=========================================================================
#=========================================================================
$ObjExcelFile.ActiveChart.Axes(1).HasTitle = $True
$ObjExcelFile.ActiveChart.Axes(2).HasTitle = $True
$ObjExcelFile.ActiveChart.Axes(1).AxisTitle.Text = "User Aanzahl"
$ObjExcelFile.ActiveChart.Axes(2).AxisTitle.Text = "Auswertungszeit"
$ObjExcelFile.ActiveChart.Axes(1).AxisTitle.font.ColorIndex=46 #siehe Abschnitt Farben
$ObjExcelFile.ActiveChart.Axes(1).AxisTitle.Font.Bold=$true
$ObjExcelFile.ActiveChart.Axes(1).AxisTitle.Font.Size=15
#=========================================================================
#=========================================================================
#=========================================================================
#=========================================================================
$ObjExcel.Application.DisplayAlerts = $False
$ObjExcelFile.SaveAs("$varPath")
$ObjExcelFile.Close()
Habe ein Code erstellt der mir in Excel die Daten speichert, dann eine neue Chart erstellt und mit den Daten befüllt.
Die Daten werden immer ins gleiche Excel File fortlaufen geschrieben, und somit wollte ich eigentlich das die Chart Tabelle aktualisiert wird.
Doch leider erstellt er mir beim jedem Aufruf immer eine neue, hätte hier jemand eine Lösung ?
Grüße
#=========================================================================
#=========================================================================
Write-Verbose "Filtern der User nach Zeit und Ergebniss in Excel schreiben..."
$varDate = $varLastLogon | select-object @{Name="lastlogon"; Expression = {[datetime]::fromfiletime($_.Properties["lastlogon"])}} | where-object {$_.lastlogon -gt $DateTime1 -and $_.lastlogon -lt $DateTime2}
If ($varDate.Count -eq $Null) {
#=========================================================================
#=========================================================================
$introw = $ObjExcelSheet.UsedRange.Rows.Count + 1
$ObjExcelSheet.cells.item($introw, 1) = "$DateTime1 und $DateTime2"
$ObjExcelSheet.cells.item($introw, 2) = "0"
$ObjExcelSheet.range($ObjExcelSheet.cells.item(1,1),$ObjExcelSheet.cells.item(1,2)).Font.Bold = $true
$ObjExcelSheet.UsedRange.EntireColumn.AutoFit();
#=========================================================================
#=========================================================================
$ObjExcelSheet.range("A1").select()
$ObjExcel.Selection.CurrentRegion.Select()
$ObjExcelFile.charts.add() | out-null
$worksheet = $ObjExcelFile.Worksheets.Item(1)
$chart = $worksheet.chartobjects(1).chart
$ObjExcelFile.ActiveChart.Location(2,$($ObjExcelSheet.name)) | out-null
$ObjExcelFile.ActiveChart.chartType = 65
$ObjExcelFile.ActiveChart.seriescollection(1).border.LineStyle = -4118
#=========================================================================
#=========================================================================
$ObjExcelFile.ActiveChart.hasTitle=$true #titel erscheint oder nicht , #Überschrift
$ObjExcelFile.ActiveChart.ChartTitle.Text = "Auswertung LastLogon"
#=========================================================================
#=========================================================================
$ObjExcelFile.ActiveChart.Axes(1).HasTitle = $True
$ObjExcelFile.ActiveChart.Axes(2).HasTitle = $True
$ObjExcelFile.ActiveChart.Axes(1).AxisTitle.Text = "User Aanzahl"
$ObjExcelFile.ActiveChart.Axes(2).AxisTitle.Text = "Auswertungszeit"
$ObjExcelFile.ActiveChart.Axes(1).AxisTitle.font.ColorIndex=46 #siehe Abschnitt Farben
$ObjExcelFile.ActiveChart.Axes(1).AxisTitle.Font.Bold=$true
$ObjExcelFile.ActiveChart.Axes(1).AxisTitle.Font.Size=15
#=========================================================================
#=========================================================================
#=========================================================================
#=========================================================================
$ObjExcel.Application.DisplayAlerts = $False
$ObjExcelFile.SaveAs("$varPath")
$ObjExcelFile.Close()
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 217828
Url: https://administrator.de/contentid/217828
Ausgedruckt am: 14.11.2024 um 21:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo,
ich bin eigentlich erst durch Deinen Post auf die Idee gekommen, dass man per PS Inhalte in Excel Dateien schreiben kann.
Daher ist mein Wissen da noch sehr begrenzt.
Prinzipiell habe ich ähnliches vor wie Du.
Ich Protokolliere bisher die Hyper-V Performancedaten per Measure-vm in eine .csv Datei welche bei Aufruf einer Excel Tabelle automatisch eingelesen wird.
Praktischer wäre für mich die Möglichkeit, eine bestehende Excel Datei (incl. Diagramm) zu öffnen und immer die gleichen Zellen mit neuen Performancedaten zu füllen.
So würde die Datei später automatisch per Mail verschickt und ich hätte jeden morgen die fertige Auswertung incl. Diagramm im Postfach!
Also.. wie erwähnt, ich stehe noch am Anfang.
So wie ich das sehe, fehlt in Deinem Script folgendes:
$file="D:\test.xlsx"
$xl=New-Object -ComObject "Excel.Application"
$wbk = $xl.Workbooks.Open("$file")
Gruß
ich bin eigentlich erst durch Deinen Post auf die Idee gekommen, dass man per PS Inhalte in Excel Dateien schreiben kann.
Daher ist mein Wissen da noch sehr begrenzt.
Prinzipiell habe ich ähnliches vor wie Du.
Ich Protokolliere bisher die Hyper-V Performancedaten per Measure-vm in eine .csv Datei welche bei Aufruf einer Excel Tabelle automatisch eingelesen wird.
Praktischer wäre für mich die Möglichkeit, eine bestehende Excel Datei (incl. Diagramm) zu öffnen und immer die gleichen Zellen mit neuen Performancedaten zu füllen.
So würde die Datei später automatisch per Mail verschickt und ich hätte jeden morgen die fertige Auswertung incl. Diagramm im Postfach!
Also.. wie erwähnt, ich stehe noch am Anfang.
So wie ich das sehe, fehlt in Deinem Script folgendes:
$file="D:\test.xlsx"
$xl=New-Object -ComObject "Excel.Application"
$wbk = $xl.Workbooks.Open("$file")
Gruß