通过提供动态表并从该表中选择动态字段来在xl中加载数据

2020-09-01 21:44发布

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

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


下面是程序和输出屏幕。

报告zvb_dummy1。 :w_dref TYPE REF TO data。
字段符号: TYPE STANDARD TABLE,"从数据库读取数据的动态内部表
TYPE ANY。

DATA:w_dref1 TYPE 引用数据。
字段符号: TYPE STANDARD TABLE,从t_itab加载1000条记录的表
ANY类型。

TYPE:BEGIN OF ty_header,"至 在xlsx文件中创建字段标题。
fname(100)TYPE c,
ty_header的结尾。

数据:it_header ty_header的类型表,
wa_header TYPE ty_header的类型。

数据:inttab OCCURS 100的开始。"表读取给定表的文件
包含结构dfies。
数据:选中"类型"复选框。 "用于检查选定字段条件的附加字段
数据:inttab的结尾。

数据:wa_tab类似于inttab的行。

类型:BEGIN OF ty_int1,"用于选择字段的结构 在选择屏幕上
字段名TYPE字段名,
ty_int1的结尾。

数据:inttab1 ty_int1的类型表,"以加载给定数据库表的字段名。
wa_tab1类似于LINE OF inttab1。


参数:p_table TYPE标签名强制。
参数:p_file类似于rlgrap文件名DEFAULT'C:\ Users \ aaalve \ Desktop \ export.xls'。
参数:p_enable AS复选框默认值''用户命令uc1。


在选择屏幕输出处。

如果p_enable ='X'。
调用函数'DDIF_FIELDINFO_GET'"以获取表 字段信息
导出
选项卡名称= p_table
* FIELDNAME = FIELDNM
语言= sy-langu

表格
dfies_tab = inttab
*固定值=
例外
not_found = 1
internal_error = 2
其他=3。


PERFORM po pup_display。

ENDIF。

*&-------------------------------- ------------------------------------- *
*&表格popup_display
*& -------------------------------------------------- ------------------- *
*文字
* --------------------- ------------------------------------------------- *
FORM popup_display。

*用于弹出式选择的字段目录
清除ls_fieldcat。
ls_fieldcat-row_pos ='1'。
ls_fieldcat-col_pos ='1'。
ls_fieldcat -fieldname ='CHECK'。
ls_fieldcat-tabname ='INTTAB'。
ls_fieldcat-seltext_m ='SELECT'。
附加ls_fieldcat到lt_fieldcat。
清除ls_fieldcat。
ls_fieldcat-row_pos = '1'。
ls_fieldcat-col_pos ='2'。
ls_fieldcat-fieldname ='FIELDNAME'。
ls_fieldcat-tabname ='INTTAB'。
ls_fieldcat-seltext_m ='FIELDNAME'。
ls_fieldcat-outputlen =50。
附加ls_fieldcat至lt_fieldcat。

ls_fieldcat-row_pos ='1'。
ls_fieldcat-col_pos ='3'。
ls_fieldcat-fieldname ='FIELDTEXT' 。
ls_fieldcat- tabname ='INTTAB'。
ls_fieldcat-seltext_m ='DESCRIPTION'。
附加ls_fieldcat至lt_fieldcat。
清除ls_fieldcat。

*在POPUP中显示数据以选择字段
调用功能'REUSE_ALV_POPUP_TO_SELECT'
导出
i_zebra ='X'
it_fieldcat = lt_fieldcat
i_tabname ='INTTAB'
i_checkbox_fieldname ='CHECK'
表格
t_outtab = inttab。
清除p_enable。

ENDFORM。 " popup_display

选择开始。

PERFORM选择
PERFORM下载。

*&------------- -------------------------------------------------- ------ *
*&形式SELEC
*&------------------------------- -------------------------------------- *
*文字
*- -------------------------------------------------- ------------------ *
*-> p1文本
* <-p2文本
* --------- -------------------------------------------------- ----------- *
格式选择。


创建数据w_dref类型标准表(p_table)。" 指向数据库表的结构< br> ASSIGN w_dref-> *至

创建数据w_dref1类型标准表(p_table)。 " 指向数据库表的结构
ASSIGN w_dref1-> * TO


IF sy-subrc EQ0。
LOOP AT inttab INTO wa_tab WHERE检查 ='X'。"从inttab到inttab1中选择字段名称

从(p_table)
中选择(wa_tab-fieldname)到表的对应字段中。

MOVE wa_tab- 字段名TO wa_header。
APPEND wa_header到it_header。
清除:wa_tab,wa_header。
ENDLOOP。

在inttab1上LOOP。INTO wa_tab1。 br>进入表的对应字段。 "根据选定的字段(即wa_tab1
CLEAR wa_tab1。
ENDLOOP。
ENDIF。

ENDFORM。
*&-----------获取记录 -------------------------------------------------- -------- *
*&表格下载
*&----------------------------- ---------------------------------------- *
*文字
* -------------------------------------------------- -------------------- *
*-> p1文本
* <-p2文本
* ------- -------------------------------------------------- ------------- *
FORM下载。
DATA:cnt TYPE字符串。"以在fi_itab
DATA:d TYPE字符串中加载1000条记录。 "创建多个excel ex export1 export2文件。...
数据:文件类型字符串。"将p_file转换为字符串
file = p_file。
cnt =0。


分配。 "具有所有记录的原始表

ASSIGN TO
APPEND TO
cnt = cnt +1。
*
IF cnt>1000。
d = d +1。

合并'C:\ Users \ vbirajda \ Desktop \ export'd'.xls'到INTO文件。
调用功能'GUI_DOWNLOAD'
导出
* BIN_FILESIZE =
文件名=文件
文件类型='DAT'
append ='X'
write_field_separator ='X'

表格
data_tab =
字段名称= it_header


IF sy-subrc <> 0.
ENDIF。
cnt =0。
循环AT 分配。"清除fi_itab中的1000条记录,以再次添加1000条记录
DELETE
ENDLOOP。
ENDIF。

ENDLOOP。
ENDFORM。

(29.7 kB)

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

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


下面是程序和输出屏幕。

报告zvb_dummy1。 :w_dref TYPE REF TO data。
字段符号: TYPE STANDARD TABLE,"从数据库读取数据的动态内部表
TYPE ANY。

DATA:w_dref1 TYPE 引用数据。
字段符号: TYPE STANDARD TABLE,从t_itab加载1000条记录的表
ANY类型。

TYPE:BEGIN OF ty_header,"至 在xlsx文件中创建字段标题。
fname(100)TYPE c,
ty_header的结尾。

数据:it_header ty_header的类型表,
wa_header TYPE ty_header的类型。

数据:inttab OCCURS 100的开始。"表读取给定表的文件
包含结构dfies。
数据:选中"类型"复选框。 "用于检查选定字段条件的附加字段
数据:inttab的结尾。

数据:wa_tab类似于inttab的行。

类型:BEGIN OF ty_int1,"用于选择字段的结构 在选择屏幕上
字段名TYPE字段名,
ty_int1的结尾。

数据:inttab1 ty_int1的类型表,"以加载给定数据库表的字段名。
wa_tab1类似于LINE OF inttab1。


参数:p_table TYPE标签名强制。
参数:p_file类似于rlgrap文件名DEFAULT'C:\ Users \ aaalve \ Desktop \ export.xls'。
参数:p_enable AS复选框默认值''用户命令uc1。


在选择屏幕输出处。

如果p_enable ='X'。
调用函数'DDIF_FIELDINFO_GET'"以获取表 字段信息
导出
选项卡名称= p_table
* FIELDNAME = FIELDNM
语言= sy-langu

表格
dfies_tab = inttab
*固定值=
例外
not_found = 1
internal_error = 2
其他=3。


PERFORM po pup_display。

ENDIF。

*&-------------------------------- ------------------------------------- *
*&表格popup_display
*& -------------------------------------------------- ------------------- *
*文字
* --------------------- ------------------------------------------------- *
FORM popup_display。

*用于弹出式选择的字段目录
清除ls_fieldcat。
ls_fieldcat-row_pos ='1'。
ls_fieldcat-col_pos ='1'。
ls_fieldcat -fieldname ='CHECK'。
ls_fieldcat-tabname ='INTTAB'。
ls_fieldcat-seltext_m ='SELECT'。
附加ls_fieldcat到lt_fieldcat。
清除ls_fieldcat。
ls_fieldcat-row_pos = '1'。
ls_fieldcat-col_pos ='2'。
ls_fieldcat-fieldname ='FIELDNAME'。
ls_fieldcat-tabname ='INTTAB'。
ls_fieldcat-seltext_m ='FIELDNAME'。
ls_fieldcat-outputlen =50。
附加ls_fieldcat至lt_fieldcat。

ls_fieldcat-row_pos ='1'。
ls_fieldcat-col_pos ='3'。
ls_fieldcat-fieldname ='FIELDTEXT' 。
ls_fieldcat- tabname ='INTTAB'。
ls_fieldcat-seltext_m ='DESCRIPTION'。
附加ls_fieldcat至lt_fieldcat。
清除ls_fieldcat。

*在POPUP中显示数据以选择字段
调用功能'REUSE_ALV_POPUP_TO_SELECT'
导出
i_zebra ='X'
it_fieldcat = lt_fieldcat
i_tabname ='INTTAB'
i_checkbox_fieldname ='CHECK'
表格
t_outtab = inttab。
清除p_enable。

ENDFORM。 " popup_display

选择开始。

PERFORM选择
PERFORM下载。

*&------------- -------------------------------------------------- ------ *
*&形式SELEC
*&------------------------------- -------------------------------------- *
*文字
*- -------------------------------------------------- ------------------ *
*-> p1文本
* <-p2文本
* --------- -------------------------------------------------- ----------- *
格式选择。


创建数据w_dref类型标准表(p_table)。" 指向数据库表的结构< br> ASSIGN w_dref-> *至

创建数据w_dref1类型标准表(p_table)。 " 指向数据库表的结构
ASSIGN w_dref1-> * TO


IF sy-subrc EQ0。
LOOP AT inttab INTO wa_tab WHERE检查 ='X'。"从inttab到inttab1中选择字段名称

从(p_table)
中选择(wa_tab-fieldname)到表的对应字段中。

MOVE wa_tab- 字段名TO wa_header。
APPEND wa_header到it_header。
清除:wa_tab,wa_header。
ENDLOOP。

在inttab1上LOOP。INTO wa_tab1。 br>进入表的对应字段。 "根据选定的字段(即wa_tab1
CLEAR wa_tab1。
ENDLOOP。
ENDIF。

ENDFORM。
*&-----------获取记录 -------------------------------------------------- -------- *
*&表格下载
*&----------------------------- ---------------------------------------- *
*文字
* -------------------------------------------------- -------------------- *
*-> p1文本
* <-p2文本
* ------- -------------------------------------------------- ------------- *
FORM下载。
DATA:cnt TYPE字符串。"以在fi_itab
DATA:d TYPE字符串中加载1000条记录。 "创建多个excel ex export1 export2文件。...
数据:文件类型字符串。"将p_file转换为字符串
file = p_file。
cnt =0。


分配。 "具有所有记录的原始表

ASSIGN TO
APPEND TO
cnt = cnt +1。
*
IF cnt>1000。
d = d +1。

合并'C:\ Users \ vbirajda \ Desktop \ export'd'.xls'到INTO文件。
调用功能'GUI_DOWNLOAD'
导出
* BIN_FILESIZE =
文件名=文件
文件类型='DAT'
append ='X'
write_field_separator ='X'

表格
data_tab =
字段名称= it_header


IF sy-subrc <> 0.
ENDIF。
cnt =0。
循环AT 分配。"清除fi_itab中的1000条记录,以再次添加1000条记录
DELETE
ENDLOOP。
ENDIF。

ENDLOOP。
ENDFORM。

(29.7 kB)
付费偷看设置
发送
5条回答
大道至简
1楼 · 2020-09-01 22:10.采纳回答

此问题是因为您没有将选择字段串联到单个查询中,因此每次查询都以全新Select方式运行时都会出现。

在FORM SELEC中用以下代码替换代码:

创建数据w_dref类型标准表(p_table)。 " 指向数据库表的结构
ASSIGN w_dref-> *至

创建数据w_dref1类型标准表(p_table)。 " 指向数据库表的结构
ASSIGN w_dref1-> *至


IF sy-subrc EQ0。
数据:lv_temp TYPE字符串。
LOOP AT inttab INTO wa_tab WHERE检查='X'。 "从inttab到inttab1选择字段名称

合并lv_temp wa_tab字段名INTO lv_temp按空格分隔。

将wa_tab-fieldname移动到wa_header。
将wa_header附加到it_header。
清除:wa_tab,wa_header。
ENDLOOP。

从(p_table)中选择(lv_temp)

的对应字段
在inttab1处循环播放INTO wa_tab1。
从(p_table)中选择(wa_tab1)
的对应字段。 "根据所选字段(即wa_tab1
清除wa_tab1。
ENDLOOP。
ENDIF。

这为我提供了正确的值!

CJones
2楼-- · 2020-09-01 22:17

是的,我有一个问题,只有最后选择的字段记录才会加载到xl文件中。

shere_lin
3楼-- · 2020-09-01 22:19

此帖子已作为答案显示为评论,但已成为评论。

Doze时光
4楼-- · 2020-09-01 22:16

您为什么评论您的回复 作为正确答案?

当您将任何信息传递给帖子时,您只需要发表评论就不要写任何内容作为答案,除非它确实有助于成为答案。

我建议您赚钱 在下面的"登机"链接中,可以很好地了解SCN!

https://community。 sap.com/resources/missions-badges

按照我针对您的问题在解决方案下方发布的方式!

致谢!

Haoba3210
5楼-- · 2020-09-01 22:16

一周热门 更多>