如何在C#中的SAP GUIContainerShell上设置当前单元格?

如何在C#中的SAP GUIContainerShell上设置当前单元格?,c#,sap-gui,C#,Sap Gui,目前,我正在使用SAP GUI脚本自动化我的工作,在尝试重新创建录制的宏时,我遇到了一个问题,我不知道如何翻译 session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").setCurrentCell 1,"MAKTX2" session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").doubleClickCur

目前,我正在使用SAP GUI脚本自动化我的工作,在尝试重新创建录制的宏时,我遇到了一个问题,我不知道如何翻译

session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").setCurrentCell 1,"MAKTX2"
session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").doubleClickCurrentCell
session.findById("wnd[1]/tbar[0]/btn[0]").press
我已经阅读了SAP GUI脚本API pdf,正在努力了解如何操作
.setCurrentCell 1,“MAKTX2”
部分。我通过以下方式访问容器单元:

GuiContainerShell materials = (GuiContainerShell)session.FindById("wnd[0]/shellcont/shell/shellcont[1]/shell");
如何使“材质”双击“MAKTX2”

编辑:完整SAP GUI脚本:

SapROTWr.CSapROTWrapper sapROTWrapper = new SapROTWr.CSapROTWrapper();
object SapGuilRot = sapROTWrapper.GetROTEntry("SAPGUI");
object engine = SapGuilRot.GetType().InvokeMember("GetScriptingEngine", System.Reflection.BindingFlags.InvokeMethod, null, SapGuilRot, null);
GuiApplication GuiApp = (GuiApplication)engine;
GuiConnection connection = (GuiConnection)GuiApp.Connections.ElementAt(0);
GuiSession session = (GuiSession)connection.Children.ElementAt(0);
GuiFrameWindow frame = (GuiFrameWindow)session.FindById("wnd[0]");
GuiTextField jobsite = (GuiTextField)session.FindById("wnd[0]/usr/subSA_0100_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2410/subSA_2410_1:SAPMZCX_CSDSLSBM5001_OFS_OTS:2510/ctxtKUWEV-KUNNR");
jobsite.Text = "I033";
frame.SendVKey(0);
GuiLabel aggregates = (GuiLabel)session.FindById("wnd[1]/usr/lbl[12,3]");
aggregates.SetFocus();
GuiFrameWindow frame2 = (GuiFrameWindow)session.FindById("wnd[1]");
frame2.SendVKey(1);
GuiContainerShell materials = (GuiContainerShell)session.FindById("wnd[0]/shellcont/shell/shellcont[1]/shell");

老实说,我无法帮助您使用C#,但也许SAP界面已经足够通用了。问题是,
session.findById(“wnd[0]/shellcont/shell/shellcont[1]/shell”)
为您提供了对GuiShell或GuiContainerShell类型的对象的引用,或者对其进行任何调用。在此引用中,可以调用为此类型定义的方法。同样的,当你这么做的时候

session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").setCurrentCell 1,"MAKTX2"
您只需首先获取引用,然后在其上应用方法
setCurrentCell
,所有这些都在同一行上

你在C#做的时候

您给该参考资料起了一个名称
materials
,如果该行工作正常,我想您现在可以说:

materials.setCurrentCell(1, "MAKTX2")
materials.doubleClickCurrentCell

老实说,我无法帮助您使用C#,但也许SAP界面已经足够通用了。问题是,
session.findById(“wnd[0]/shellcont/shell/shellcont[1]/shell”)
为您提供了对GuiShell或GuiContainerShell类型的对象的引用,或者对其进行任何调用。在此引用中,可以调用为此类型定义的方法。同样的,当你这么做的时候

session.findById("wnd[0]/shellcont/shell/shellcont[1]/shell").setCurrentCell 1,"MAKTX2"
您只需首先获取引用,然后在其上应用方法
setCurrentCell
,所有这些都在同一行上

你在C#做的时候

您给该参考资料起了一个名称
materials
,如果该行工作正常,我想您现在可以说:

materials.setCurrentCell(1, "MAKTX2")
materials.doubleClickCurrentCell

感谢Nelson的帮助,我面临的问题是没有setCurrentCell方法可以应用于materials变量。我将用完整的C#更新问题,说明我是如何做到这一点的,也许你们可以看得更清楚,并建议我如何在Visual Basic中尝试转换!?我想我明白了。可能材料不是GuiContainerShell类型的!看看您的findById字符串:“wnd[0]/shellcont/shell/shellcont[1]/shell”,您可以看到shellcont(ainer)中有一个shell!另外,我还记得
.setCurrentCell
是在VBA中为GuiGridView定义的。在这里检查:我可以看到函数
.setCurrentCell
仅为类型为
GuiCtrlGridView
的对象定义。它是shell的父级。尝试更改类型并检查铸入材料是否有效。令人惊讶的是,它有效。我永远也找不到。非常感谢。感谢Nelson的帮助,我面临的问题是没有setCurrentCell方法可以应用于materials变量。我将用完整的C#更新问题,说明我是如何做到这一点的,也许你们可以看得更清楚,并建议我如何在Visual Basic中尝试转换!?我想我明白了。可能材料不是GuiContainerShell类型的!看看您的findById字符串:“wnd[0]/shellcont/shell/shellcont[1]/shell”,您可以看到shellcont(ainer)中有一个shell!另外,我还记得
.setCurrentCell
是在VBA中为GuiGridView定义的。在这里检查:我可以看到函数
.setCurrentCell
仅为类型为
GuiCtrlGridView
的对象定义。它是shell的父级。尝试更改类型并检查铸入材料是否有效。令人惊讶的是,它有效。我永远也找不到。非常感谢。