Excel中的RFC_READ_TABLE->列限制?

2020-08-30 19:12发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我写了一些VBA代码,该代码通过RFC将BW表的内容传输到excel工作表中。

总而言之,它可以正常工作,但是如果我们要将超过14个表列导入到excle工作表中,则不会发生任何事情。

只有14列(或更少)列,我们没有问题。

有任何限制。 您知道任何解决方法吗?

您可以在下面找到我的vba代码。 如果我们取消注释这两行

'T_I_Fields.Rows.Add

'T_I_Fields(15," FIELDNAME")=" ENTITY"

什么都没发生。

私有子CommandButton2_Click()

将rfc_read_table视作对象

昏暗功能Ctrl作为对象

将T_I_Options视作对象

将T_I_Fields视作对象

将T_E_Data视作对象

Dim i,x As Integer

将strDataRow设置为字符串

将DataRow变体

Dim Col As布尔值

Col = False

设置功能Ctrl = CreateObject(" SAP.Functions")

设置rfc_read_table = functionCtrl.Add(" RFC_READ_TABLE")

使用rfc_read_table

.exports(" QUERY_TABLE")="/img/1CPMB/PGFXEJRDT"

.exports(" DELIMITER")=" |" '分隔符

结尾为

设置T_I_Options = rfc_read_table.tables(" OPTIONS")

设置T_I_Fields = rfc_read_table.tables(" FIELDS")

设置T_E_Data = rfc_read_table.tables(" DATA")

'Einschränken

'<<<<< Importtabellenfüllen>>>>>>>

'Welche Felder sollen gelesen werden

T_I_Fields.Rows.Add

T_I_Fields(1," FIELDNAME")=" JRN_ID"

T_I_Fields.Rows.Add

T_I_Fields(2," FIELDNAME")=" APPSET_ID"

T_I_Fields.Rows.Add

T_I_Fields(3," FIELDNAME")=" APPL_ID"

T_I_Fields.Rows.Add

T_I_Fields(4," FIELDNAME")=" JRN_TMPL_ID"

T_I_Fields.Rows.Add

T_I_Fields(5," FIELDNAME")=" ROW_NUM"

T_I_Fields.Rows.Add

T_I_Fields(6," FIELDNAME")="借方"

T_I_Fields.Rows.Add

T_I_Fields(7," FIELDNAME")=" CREDIT"

T_I_Fields.Rows.Add

T_I_Fields(8," FIELDNAME")=" REMARK"

T_I_Fields.Rows.Add

T_I_Fields(9," FIELDNAME")=" ACCOUNT"

T_I_Fields.Rows.Add

T_I_Fields(10," FIELDNAME")=" ACCTDETAIL"

T_I_Fields.Rows.Add

T_I_Fields(11," FIELDNAME")=" CATEGORY"

T_I_Fields.Rows.Add

T_I_Fields(12," FIELDNAME")=" CONSOSCOPE"

T_I_Fields.Rows.Add

T_I_Fields(13," FIELDNAME")="货币"

T_I_Fields.Rows.Add

T_I_Fields(14," FIELDNAME")=" DATASRC"

'T_I_Fields.Rows.Add

'T_I_Fields(15," FIELDNAME")=" ENTITY"

ret = rfc_read_table.Call

如果T_E_Data.RowCount> 0且ret = True然后

对于i = 1到T_E_Data.RowCount

strDataRow = T_E_Data(i,1)

DataRow = Split(strDataRow," |")

如果Col = False,则

对于x = 0到UBound(DataRow)

工作表("详细信息")。单元格(1,x + 1)。值= T_I_Fields(x + 1,1)

下一个x

Col = True

如果结束

对于x = 0到UBound(DataRow)

工作表("详细信息")。单元格(i + 1,x + 1)。值= DataRow(x)

下一个x

下一个i

如果结束

结束子



致以诚挚的谢意

Tobias

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我写了一些VBA代码,该代码通过RFC将BW表的内容传输到excel工作表中。

总而言之,它可以正常工作,但是如果我们要将超过14个表列导入到excle工作表中,则不会发生任何事情。

只有14列(或更少)列,我们没有问题。

有任何限制。 您知道任何解决方法吗?

您可以在下面找到我的vba代码。 如果我们取消注释这两行

'T_I_Fields.Rows.Add

'T_I_Fields(15," FIELDNAME")=" ENTITY"

什么都没发生。

私有子CommandButton2_Click()

将rfc_read_table视作对象

昏暗功能Ctrl作为对象

将T_I_Options视作对象

将T_I_Fields视作对象

将T_E_Data视作对象

Dim i,x As Integer

将strDataRow设置为字符串

将DataRow变体

Dim Col As布尔值

Col = False

设置功能Ctrl = CreateObject(" SAP.Functions")

设置rfc_read_table = functionCtrl.Add(" RFC_READ_TABLE")

使用rfc_read_table

.exports(" QUERY_TABLE")="/img/1CPMB/PGFXEJRDT"

.exports(" DELIMITER")=" |" '分隔符

结尾为

设置T_I_Options = rfc_read_table.tables(" OPTIONS")

设置T_I_Fields = rfc_read_table.tables(" FIELDS")

设置T_E_Data = rfc_read_table.tables(" DATA")

'Einschränken

'<<<<< Importtabellenfüllen>>>>>>>

'Welche Felder sollen gelesen werden

T_I_Fields.Rows.Add

T_I_Fields(1," FIELDNAME")=" JRN_ID"

T_I_Fields.Rows.Add

T_I_Fields(2," FIELDNAME")=" APPSET_ID"

T_I_Fields.Rows.Add

T_I_Fields(3," FIELDNAME")=" APPL_ID"

T_I_Fields.Rows.Add

T_I_Fields(4," FIELDNAME")=" JRN_TMPL_ID"

T_I_Fields.Rows.Add

T_I_Fields(5," FIELDNAME")=" ROW_NUM"

T_I_Fields.Rows.Add

T_I_Fields(6," FIELDNAME")="借方"

T_I_Fields.Rows.Add

T_I_Fields(7," FIELDNAME")=" CREDIT"

T_I_Fields.Rows.Add

T_I_Fields(8," FIELDNAME")=" REMARK"

T_I_Fields.Rows.Add

T_I_Fields(9," FIELDNAME")=" ACCOUNT"

T_I_Fields.Rows.Add

T_I_Fields(10," FIELDNAME")=" ACCTDETAIL"

T_I_Fields.Rows.Add

T_I_Fields(11," FIELDNAME")=" CATEGORY"

T_I_Fields.Rows.Add

T_I_Fields(12," FIELDNAME")=" CONSOSCOPE"

T_I_Fields.Rows.Add

T_I_Fields(13," FIELDNAME")="货币"

T_I_Fields.Rows.Add

T_I_Fields(14," FIELDNAME")=" DATASRC"

'T_I_Fields.Rows.Add

'T_I_Fields(15," FIELDNAME")=" ENTITY"

ret = rfc_read_table.Call

如果T_E_Data.RowCount> 0且ret = True然后

对于i = 1到T_E_Data.RowCount

strDataRow = T_E_Data(i,1)

DataRow = Split(strDataRow," |")

如果Col = False,则

对于x = 0到UBound(DataRow)

工作表("详细信息")。单元格(1,x + 1)。值= T_I_Fields(x + 1,1)

下一个x

Col = True

如果结束

对于x = 0到UBound(DataRow)

工作表("详细信息")。单元格(i + 1,x + 1)。值= DataRow(x)

下一个x

下一个i

如果结束

结束子



致以诚挚的谢意

Tobias

付费偷看设置
发送
3条回答
SAP砖家
1楼 · 2020-08-30 19:45.采纳回答

这是我的猜测:

RFC_READ_TABLE为每个记录返回单个字符串行中的所有表字段。

此行的上限为512个字符(数据元素:SYCHAR512)

在这种情况下,您有两种选择:

1)编写您自己的RFC功能模块,以获取单个表并为每个表字段返回单个列。 (推荐)

2)调用RFC_READ_TABLE两次。 第一次调用检索第一列,第二次调用返回主键和其他列。

代楠1984
2楼-- · 2020-08-30 19:43

选择分隔符也非常重要。 根据您要处理的信息类型,最好有一个自定义的RFC功能模块,该功能实际上提取列而不是连接列。

黑丝骑士
3楼-- · 2020-08-30 19:49

我创建了RFC_READ_TABLE远程函数调用的副本,并将数据类型更改为具有8000个符号的Char。 现在我可以将整个表转移到excel????

KR

Tobias

一周热门 更多>