我试图使自动变量可用于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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
并将他们的实例添加到当前的POwerShell会话:
runspace.SessionStateProxy.PSVariable.Set(new ActiveCell("ActiveCell"));
runspace.SessionStateProxy.PSVariable.Set(new ActiveSheet("ActiveSheet"));
Run Code Online (Sandbox Code Playgroud)
这有效,我可以使用PowerShell中的那些变量作为$ ActiveCell和$ ActiveSheet(它们的值更改为Excel活动工作表或单元格更改).然后我在这里阅读PSVariable文档并看到了这个:
"没有确定的方案可以从这个类派生.要以编程方式创建一个shell变量,创建一个这个类的实例并使用PSVariableIntrinsics类来设置它."
由于我是从PSVariable派生出来的,我试图使用建议的内容:
PSVariable activeCell = new PSVariable("ActiveCell");
activeCell.Value = Globals.ThisAddIn.Application.ActiveCell;
runspace.SessionStateProxy.PSVariable.Set(activeCell);
Run Code Online (Sandbox Code Playgroud)
使用它,$ ActiveCell出现在我的PowerShell会话中,但是当我在Excel中更改活动单元格时,它的值不会改变.
PSVariable文档中的上述注释是我应该担心的,或者我可以继续创建PSVariable派生类吗?有没有其他方法可以让PowerShell使用Excel全局变量?
小智 5
我们的文档是错误的 - 它是受支持的方案.
以下是关于该技术的更多信息:
Lee Holmes [MSFT] Windows PowerShell开发
| 归档时间: |
|
| 查看次数: |
1850 次 |
| 最近记录: |