【发布时间】:2011-06-02 14:49:42
【问题描述】:
我试图使 Excel VBA(如 ActiveSheet 或 ActiveCell)可以使用的自动变量也可以作为“自动变量”用于 PowerShell。 PowerShell 引擎托管在 Excel VSTO 加载项中,并且 Excel.Application 作为 Globals.ThisAddin.Application 提供给它。我在 StackOverflow 上找到了 this 线程并开始创建 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 文档here 并看到了这个:
“没有从此类派生的既定方案。要以编程方式创建 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 可用?
【问题讨论】:
标签: c# powershell excel-addins