derhoeppi
Goto Top

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:
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

Content-Key: 286748

Url: https://administrator.de/contentid/286748

Printed on: April 25, 2024 at 02:04 o'clock

Mitglied: 114757
Solution 114757 Oct 26, 2015, updated at Oct 27, 2015 at 14:24:09 (UTC)
Goto Top
Moin Meister Hoeppi ...
Worin besteht mein Fehler?
  • Erstens in Rechtschreibfehlern:
SeiresCollection
$chart1.SeiresCollection(1).Name = "FirstOne"
$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'  
Gruß jodel32
Member: derhoeppi
derhoeppi Oct 26, 2015 updated at 20:29:58 (UTC)
Goto Top
Hallo jodel32,

vielen Dank. Nun habe ich noch ein kleines Problem. Bei $series.Values wird der Tabellenname durch eine Variable bestimmt. Nun habe ich aber das Problem beim Zusammensetzen des Strings mit den Hochkomma und Anführungszeichen.

Als Beispiel sollte es in etwa so aussehen:
Var_Values = "'="+$Tabellenname+"!$A$3:$G$3'"  
$series.Values = $Var_Values

So wie du bereits geschrieben hast, interpretiert er die $ bei der Range Angabe als Variablen. Ich habe ebenso mit zusätzlichen Hochkommas versucht, aber bisher kommt nicht gescheites bei raus.

Zu deiner dritten Anmerkung habe ich noch eine Frage.
$chart1 = $Excel.Worksheets.Item("Übersicht").ChartObjects(1).Chart  
Ich gebe meinem Chart einen Namen. Kann ich dieses Objekt auch mit dem Namen ansprechen? Der Hintergrund dazu ist, dass ich mehrere Charts auf einem Tabellenblatt platziere, bei denen Series zur Scriptlaufzeit hinzugefügt werden. Ich möchte ungern vermuten welcher Chart nur 1,2,3 oder 4 ist.

Gruß
derhoeppi
Mitglied: 114757
114757 Oct 26, 2015 updated at 21:08:37 (UTC)
Goto Top
$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