Я пытаюсь портировать на Python скрипт загрузки таблиц SAP, который уже работает в 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.
Спасибо всем, кто предоставит подсказку