Ich versuche, automatische Variablen für Excel VBA verfügbar zu machen (wie ActiveSheet oder ActiveCell), die PowerShell auch als 'automatische Variablen' zur Verfügung stehen. Die PowerShell-Engine wird in einem Excel VSTO-Add-In und in Excel gehostet. Die Anwendung steht ihr als Globals.ThisAddin.Application zur Verfügung. Ich fand this Thread hier auf Stackoverflow und begann PSVariable abgeleiteten Klassen erstellt wie:Automatische PowerShell-Variablen von C# erstellen
public class ActiveCell : PSVariable
{
public ActiveCell(string name) : base(name) { }
public override object Value
{
get
{
return Globals.ThisAddIn.Application.ActiveCell;
}
}
}
public class ActiveSheet : PSVariable
{
public ActiveSheet(string name) : base(name) { }
public override object Value
{
get
{
return Globals.ThisAddIn.Application.ActiveSheet;
}
}
}
und das Hinzufügen von den Instanzen der aktuellen Powershell-Sitzung:
runspace.SessionStateProxy.PSVariable.Set(new ActiveCell("ActiveCell"));
runspace.SessionStateProxy.PSVariable.Set(new ActiveSheet("ActiveSheet"));
Dies funktioniert und ich bin in der Lage, diese Variablen zu verwenden, um von PowerShell als $ ActiveCell und $ ActiveSheet (ihr Wert ändert sich als Excel-Blatt oder -Zelle). Dann las ich PSVariable Dokumentation here und sah dies:
"Es gibt kein etabliertes Szenario zum Ableiten von dieser Klasse. Um eine Shell-Variable programmgesteuert zu erstellen, erstellen Sie eine Instanz dieser Klasse und legen Sie sie mithilfe der PSVariableIntrinsics-Klasse."
Wie ich aus PSVariable wurde abgeleitet, habe ich versucht, zu verwenden, was vorgeschlagen wurde:
PSVariable activeCell = new PSVariable("ActiveCell");
activeCell.Value = Globals.ThisAddIn.Application.ActiveCell;
runspace.SessionStateProxy.PSVariable.Set(activeCell);
Mit diesem $ Active in meiner Powershell-Sitzung erscheint, aber sein Wert ändert sich nicht, wie ich die aktive Zelle ändern in Excel.
Ist der obige Kommentar aus der PSVariable-Dokumentation etwas, worüber ich mich Sorgen machen sollte, oder kann ich weiterhin PSVariable-abgeleitete Klassen erstellen? Gibt es eine andere Möglichkeit, Excel-Globals für PowerShell verfügbar zu machen?
Großartig, danke! –