SAP 인터페이스 프로 그래 밍 의 RFC 시리즈 (07): 유 니 버 설 데이터베이스 시트 읽 기 기능 구현
이 편 은 RFC 호출 에 관 한 새로운 지식 이 없다.함수 호출 후 VBA 가 이 데 이 터 를 어떻게 처리 하고 Excel 에 표시 하 는 지 설명 합 니 다.VBA 에 익숙 하지 않 은 독 자 는 참고 할 수 있다.VBA 자체 의 데이터 구조의 제한 으로 인해 처리 과정 은 여전히 매우 수다스럽다.다음 에 C \ # 로 호출 하 는 코드 가 훨씬 편리 할 것 입 니 다.
더 이상 말 하지 않 겠 습 니 다. 코드:
Option Explicit
Public Sub test()
Call Logon
Call ReadTable("T030", Sheet1)
Call Logoff
End Sub
'--------------------------------------'
' tableName , inSheet
'--------------------------------------'
Private Sub ReadTable(tableName As String, inSheet As Worksheet)
Dim functions As SAPFunctions
Set functions = New SAPFunctions
Dim fm As SAPFunctionsOCX.Function
' RFC_READ_TABLE table '
Dim optionsTable As SAPTableFactoryCtrl.Table
Dim dataTable As SAPTableFactoryCtrl.Table
Dim fieldsTable As SAPTableFactoryCtrl.Table
Dim delimeter As String
delimeter = "~" ' 1'
If sapConnection Is Nothing Then Exit Sub
Set functions.Connection = sapConnection
If sapConnection.IsConnected = tloRfcConnected Then
'FM functions collection'
Set fm = functions.Add("RFC_READ_TABLE")
'------------------------'
' Import parameters
'------------------------'
'QUERY_TABLE
fm.Exports("QUERY_TABLE").Value = tableName 'Table name
'DELIMITER '
fm.Exports("DELIMITER").Value = delimeter
Set optionsTable = fm.Tables("OPTIONS") 'OPTIONS '
Set fieldsTable = fm.Tables("FIELDS") 'FIELDS '
Set dataTable = fm.Tables("DATA") 'DATA '
fm.Call
' Exception, '
If fm.Exception <> "" Then
Debug.Print fm.Exception
Exit Sub
End If
' fields '
Dim fields() As Variant
fields = ItabToArray(fieldsTable)
' data '
Dim data() As Variant
data = ItabToArray(dataTable)
' data '
Dim splittedData() As Variant
splittedData = splitData(data, delimeter)
' Excel , , Excel '
Dim r As Long
Dim c As Long
For r = 1 To UBound(splittedData, 1)
For c = 1 To UBound(splittedData, 2)
splittedData(r, c) = "'" + splittedData(r, c)
Next
Next
' field name, field text data '
Call WriteData(fields, splittedData, Sheet1)
End If
End Sub
' itab '
Private Function ItabToArray(itab As SAPTableFactoryCtrl.Table) As Variant
Dim arr() As Variant
arr = itab.data
ItabToArray = arr
End Function
Private Function splitData(data() As Variant, delimeter As String) As Variant
Dim dataSplitted() As Variant ' '
Dim rowcount As Long
rowcount = UBound(data, 1)
' '
Dim testcol As Variant
testcol = Split(data(1, 1), delimeter) ' '
Dim colcount As Long
colcount = UBound(testcol) + 1
ReDim dataSplitted(1 To rowcount, 1 To colcount)
Dim line As Variant
Dim r As Long
Dim c As Long
For r = 1 To rowcount
line = Split(data(r, 1), delimeter) ' line 0 '
For c = 1 To colcount
dataSplitted(r, c) = line(c - 1)
Next
Next
splitData = dataSplitted
End Function
Private Sub WriteData(fields() As Variant, data() As Variant, inSheet As Worksheet)
' Clear first'
inSheet.Cells.ClearContents
Dim fieldname() As Variant
Dim fieldtext() As Variant
Dim rowcount As Integer
rowcount = UBound(fields, 1)
ReDim fieldname(1 To rowcount)
ReDim fieldtext(1 To rowcount)
Dim r As Integer
For r = 1 To UBound(fields, 1)
fieldname(r) = fields(r, 1) ' fieldname'
fieldtext(r) = fields(r, 5) ' fieldtext'
Next
' fieldname fieldtext '
' fieldname'
Dim fieldNameRange As Range
Set fieldNameRange = inSheet.Range("A1")
fieldNameRange.Resize(1, UBound(fieldname)).Value = fieldname
' fieldtext'
Dim fieldTextRange As Range
Set fieldTextRange = inSheet.Range("A2")
fieldTextRange.Resize(1, UBound(fieldname)).Value = fieldtext
' , splitted data '
Dim dataRange As Range
Set dataRange = inSheet.Range("A3")
dataRange.Resize(UBound(data, 1), UBound(data, 2)).Value = data
End Sub
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.