PowerShell Excel Hinzufügen von Series zu einem Chart
Hallo,
in einem neuen Projekt sitze ich gerade daran in einer Excel Tabelle ein Chart zu erstellen, dass auf Werte in derselben Arbeitsmappe - aber in unterschiedlichen Tabelle verweist. Meine Vorgehensweise ist das Aufzeichnen von Makros für bestimmte Funktionen. Das Erstellen eines Charts habe ich bereits hinbekommen. Nun bin ich dabei die Daten auszuwählen. Im Makro sieht es z.B. so aus:
Im Anschluss folgt das Hinzufügen weiterer Serien / Reihen. In Powershell habe ich es nun so übersetzt:
Wenn ich diesen Part ausführe erhalte ich folgende Meldung: "Method invocation failed because [System._ComObject] does not contain a method named 'SeriesCollection'."
Worin besteht mein Fehler?
Gruß
derhoeppi
in einem neuen Projekt sitze ich gerade daran in einer Excel Tabelle ein Chart zu erstellen, dass auf Werte in derselben Arbeitsmappe - aber in unterschiedlichen Tabelle verweist. Meine Vorgehensweise ist das Aufzeichnen von Makros für bestimmte Funktionen. Das Erstellen eines Charts habe ich bereits hinbekommen. Nun bin ich dabei die Daten auszuwählen. Im Makro sieht es z.B. so aus:
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(1).Name "=""Test"""
ActiveChart.SeriesCollection(1).Values = "=Test!$B$4:$M$4"
ActiveChart.SeriesCollection(1).XValues = "=Test!$B$3:$M$3"
Im Anschluss folgt das Hinzufügen weiterer Serien / Reihen. In Powershell habe ich es nun so übersetzt:
$chart1 = $Excel.Worksheets.Item("Übersicht").shapes.item('Chart 1')
$wks = $Excel.Worksheets.Item("Tabelle 1")
$chart1.SeriesCollection().NewSeries
$chart1.SeiresCollection(1).Name = "FirstOne"
$chart1.SeiresCollection(1).Values = $wks.Range("B4:M4")
$chart1.SeiresCollection(1).XValues = $wks.Range("B3:M3")
Wenn ich diesen Part ausführe erhalte ich folgende Meldung: "Method invocation failed because [System._ComObject] does not contain a method named 'SeriesCollection'."
Worin besteht mein Fehler?
Gruß
derhoeppi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 286748
Url: https://administrator.de/contentid/286748
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
3 Kommentare
Neuester Kommentar
Moin Meister Hoeppi ...
Funktionsfähiges Komplettbeispiel:
Gruß jodel32
Worin besteht mein Fehler?
- Erstens in Rechtschreibfehlern:
$chart1.SeiresCollection(1).Name = "FirstOne"
$chart1.SeiresCollection(1).Values = $wks.Range("B4:M4")
$chart1.SeiresCollection(1).XValues = $wks.Range("B3:M3")
$chart1.SeiresCollection(1).Values = $wks.Range("B4:M4")
$chart1.SeiresCollection(1).XValues = $wks.Range("B3:M3")
- Zweitens ist NewSeries() ist eine Methode keine Eigenschaft, und deshalb mit Klammern am Ende auszuführen
$chart1.SeriesCollection().NewSeries()
- Drittens kann man das Chart auch direkt so ansprechen:
$chart1 = $Excel.Worksheets.Item("Übersicht").ChartObjects(1).Chart
- Viertens kann man so auf die SeriesCollection verweisen:
$series = $chart.SeriesCollection().NewSeries()
$series.Name = "Test"
$series.Values = '=Tabelle1!$A$3:$G$3'
- Fünftens solltest du darauf achten im Range für die Values in Hochkommas zu verwenden, denn bei doppelten Anführungszeichen werden die Dollarzeichen darin als Powershellvariablen interpretiert.
Funktionsfähiges Komplettbeispiel:
$xl = New-Object -Com Excel.Application
$wb = $xl.Workbooks.Open("C:\Mappe1.xlsm")
$xl.Visible = $true
$ws = $wb.Sheets.Item(1)
$chart = $ws.ChartObjects(1).Chart
$series = $chart.SeriesCollection().NewSeries()
$series.Name = "Test"
$series.Values = '=Tabelle1!$A$3:$G$3'
$series.Values = "=$Tabellenname" + '!$A$3:$G$3'
Kann ich dieses Objekt auch mit dem Namen ansprechen?
probier's doch einfach aus...Laut Doku sollte auch der Name statt des Index gehen
https://msdn.microsoft.com/de-de/library/office/ff195149.aspx
Gruß jodel