【问题标题】:Check if xls-file in SAP检查 SAP 中的 xls 文件是否存在
【发布时间】:2017-05-07 00:44:42
【问题描述】:

我必须从 SAP 中自动导出几个 xls 文件以创建特定报告。到目前为止,我使用 SAP GUI 脚本来输入事务代码和 DIR 编号(每个文档都是唯一的)。当我只下载一个 xls 文件时,这非常有效。不过,我必须下载多个 xls。

正如您在图像中看到的那样,xls 文件位于第二个位置,这意味着使用我的脚本它只导出位于第二个位置的所有文件。例如,如果第二个位置有一个 PDF,它会自动导出 PDF,然后我无法创建报告。

Set xmlDoc = CreateObject("MSXML.DomDocument")
xmlDoc.Load "C:\Users\famichalsk\AppData\Roaming\KPI Report\DIS.xml" 


For Each testNode In xmlDoc.selectNodes("/Reports/Report")

Number_PDP = testNode.SelectSingleNode("DIS_PDP").Text

If Not IsObject(application) Then
Set SapGuiAuto  = GetObject("SAPGUI")
Set application = SapGuiAuto.GetScriptingEngine
End If
If Not IsObject(connection) Then
Set connection = application.Children(0)
End If
If Not IsObject(session) Then
Set session    = connection.Children(0)
End If
If IsObject(WScript) Then
WScript.ConnectObject session,     "on"
WScript.ConnectObject application, "on"
End If

session.findById("wnd[0]").iconify
session.findById("wnd[0]").resizeWorkingPane 132,31,false
session.findById("wnd[0]/tbar[0]/okcd").text = "/n cv04n"
session.findById("wnd[0]").sendVKey 0
         session.findById("wnd[0]/usr/tabsMAINSTRIP/tabpTAB1/ssubSUBSCRN:SAPLCV100:0401/s subSCR_MAIN:SAPLCV100:0402/ctxtSTDOKNR-LOW").text = Number_PDP
session.findById("wnd[0]/usr/tabsMAINSTRIP/tabpTAB1/ssubSUBSCRN:SAPLCV100:0401/ssubSCR_MAIN:SAPLCV100:0402/ctxtSTDOKNR-LOW").caretPosition = 12
session.findById("wnd[0]/tbar[1]/btn[8]").press
session.findById("wnd[0]/usr/cntlGRID1/shellcont/shell").doubleClickCurrentCell



session.findById("wnd[0]/usr/tabsTAB_MAIN/tabpTSMAIN/ssubSCR_MAIN:SAPLCV110:0102/cntlCTL_FILES1/shellcont/shell/shellcont[1]/shell").selectNode "          2"
session.findById("wnd[0]/usr/tabsTAB_MAIN/tabpTSMAIN/ssubSCR_MAIN:SAPLCV110:0102/btnPB_DISPLAY").press


Next

最后两行是重要的,因为在这里您选择要导出的第二个“节点”。这里我需要检查是否有 xls-file。

【问题讨论】:

    标签: excel xml vbscript scripting sap-gui


    【解决方案1】:

    您可以尝试以下解决方法。 例如:

    session.findById("wnd[0]/usr/tabsTAB_MAIN/tabpTSMAIN/ssubSCR_MAIN:SAPLCV110:0102/cntlCTL_FILES1/shellcont/shell/shellcont[1]/shell").selectNode "          2"
    session.findById("wnd[0]/usr/tabsTAB_MAIN/tabpTSMAIN/ssubSCR_MAIN:SAPLCV110:0102/cntlCTL_FILES1/shellcont/shell/shellcont[1]/shell").itemContextMenu "          2"
    session.findById("wnd[0]/usr/tabsTAB_MAIN/tabpTSMAIN/ssubSCR_MAIN:SAPLCV110:0102/cntlCTL_FILES1/shellcont/shell/shellcont[1]/shell").selectContextMenuItem "&FIND"
    myText = session.findById("wnd[1]/usr/txtLVC_S_SEA-STRING").text
    session.findById("wnd[1]/tbar[0]/btn[12]").press
    if myText = "xyz" then 
    session.findById("wnd[0]/usr/tabsTAB_MAIN/tabpTSMAIN/ssubSCR_MAIN:SAPLCV110:0102/btnPB_DISPLAY").press
    end if
    

    可能脚本中的相应段落需要重新录制。

    问候, 脚本人

    【讨论】:

    • 我试过了。但随后出现错误:Argument not optional: "session.findById(...).itemContextMenu"
    • 对我来说,在一个完全不同的事务中的一个例子中记录后,以下是正确的: ...itemContextMenu "2","&Hierarchy" 参数是否与你同义,所以可以只留下一条记录。
    • 我既没有 contextMenu 也没有文档的层次结构。也许是因为它在标签原件中。不知何故,我必须访问列工作站应用程序才能专注于“XLS”节点。
    • 可以用下面的方法吗?例如: myText = session.findbyid(....).getNodeTextByPath ("1\1\1") 您可能需要尝试多个参数,直到找到正确的参数。例如:("1\2\1") 或 ("1\2\2") 或 ... ;-)
    • 抱歉没有回复。我通过拆分方法 findbyid(...) 中的字符串来解决它,在这里您可以接近 sap 中的每个窗口。因此我可以在特定表中选择 xls 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2017-07-21
    相关资源
    最近更新 更多