【发布时间】:2018-09-03 15:57:59
【问题描述】:
我正在尝试将 SAP 表下载脚本移植到 Python,该脚本已经在 Excel VBA 上运行,但我想要一个命令行版本,并且出于超出此目标的多种原因,我更愿意避免使用 VBScript发帖。
我被困在需要在表格中填写值的那一刻
from win32com.client import Dispatch
Functions = Dispatch("SAP.Functions")
Functions.Connection.Client = "400"
Functions.Connection.ApplicationServer = "myserver"
Functions.Connection.Language = "EN"
Functions.Connection.User = "myuser"
Functions.Connection.Password = "mypwd"
Functions.Connection.SystemNumber = "00"
Functions.Connection.UseSAPLogonIni = False
if (Functions.Connection.Logon (0,True) == True):
print("Logon OK")
RFC = Functions.Add("RFC_READ_TABLE")
RFC.exports("QUERY_TABLE").Value = "USR02"
RFC.exports("DELIMITER").Value = "~"
#RFC.exports("ROWSKIPS").Value = 2000
#RFC.exports("ROWCOUNT").Value = 10
tblOptions = RFC.Tables("OPTIONS")
#RETURNED DATA
tblData = RFC.Tables("DATA")
tblFields = RFC.Tables("FIELDS")
tblFields.AppendRow ()
print(tblFields.RowCount)
print(tblFields(1,"FIELDNAME"))
# the 2 lines above print 1 and an empty string, so the row in the table exists
在此之前,它基本上是从 VBA 复制而来的,以适应语法。 此时在VBA中我可以做到
tblFields(1,"FIELDNAME") = "BNAME"
如果我这样做,我会得到一个错误,因为左边的部分是一个函数,并且以这种方式编写它返回一个字符串。在 VBA 中,它可能是一个二维数组。
我尝试了各种方法都没有成功,比如
tblFields.setValue([{"FIELDNAME":"BNAME"}])
tblFields(1,"FIELDNAME").Value = "BNAME"
tblFields(1,"FIELDNAME").setValue("BNAME")
tblFields.FieldName = "BNAME" ##kinda desperate
该脚本在不设置 FIELDS 表的情况下适用于生成少于 500 个字符的行的输出。这是函数中的 SAP 限制。
我知道这不是最好的方法,但我不能使用 SAPNWRFC 库,也不能使用 librfc32.dll。 这个方法我一定能解决,还是回VB版吧。
感谢任何提供提示的人
【问题讨论】:
标签: python sap win32com saprfc