我试图使 Excel VBA 的自动变量(如 ActiveSheet 或 ActiveCell)也可作为 PowerShell 的“自动变量”使用。PowerShell 引擎托管在 Excel VSTO 加载项中,并且 Excel.Application 作为 Globals.ThisAddin.Application 提供给它。我在 StackOverflow 上找到了这个线程并开始创建 PSVariable 派生类,例如:
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;
}
}
}
并将它们的实例添加到当前的 POwerShell 会话中:
runspace.SessionStateProxy.PSVariable.Set(new ActiveCell("ActiveCell"));
runspace.SessionStateProxy.PSVariable.Set(new ActiveSheet("ActiveSheet"));
这很有效,我可以将 PowerShell 中的这些变量用作 $ActiveCell 和 $ActiveSheet(它们的值随着 Excel 活动表或单元格的变化而变化)。然后我在这里阅读了 PSVariable 文档并看到了这个:
“没有从此类派生的既定方案。要以编程方式创建 shell 变量,请创建此类的实例并使用 PSVariableIntrinsics 类对其进行设置。”
当我从 PSVariable 派生时,我尝试使用建议的内容:
PSVariable activeCell = new PSVariable("ActiveCell");
activeCell.Value = Globals.ThisAddIn.Application.ActiveCell;
runspace.SessionStateProxy.PSVariable.Set(activeCell);
使用它,$ActiveCell 出现在我的 PowerShell 会话中,但它的值不会随着我更改 Excel 中的活动单元格而改变。
PSVariable 文档中的上述评论是我应该担心的,还是我可以继续创建 PSVariable 派生类?是否有另一种使 Excel 全局变量可用于 PowerShell 的方法?