使用abap中的select语句将数据加载到excel中,每个文件包含1000条记录

2020-09-01 10:30发布

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

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



报告zaa_fdatexta1。

DATA:ls_fieldcat TYPE slis_fieldcat_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv,
ls_fieldcatlog TYPE slis_fieldcat_alv,

数据:w_dref对数据的引用类型。
字段符号: TYPE STANDARD TABLE,"动态内部表,用于从数据库读取数据。
TYPE类型。
< br> DATA:w_dref1数据的类型引用。
字段符号: TYPE STANDARD TABLE,"从t_itab加载1000条记录的表
TYPE ANY。

TYPES: 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选项卡名OBLIGATORY。
参数:p_file类似于rlgrap文件名DEFAULT'C:\ Users \ aaalve \ Desktop \ export.xls'。
参数:p_enable AS CHECKBOX DEFAULT''USER-COMMAND uc1。
数据s_cursor类型光标。


在选择屏幕输出处。

如果p_enable ='X'。
调用 FUNCTION'DDIF_FIELDINFO_GET'"以获取表字段信息
导出
选项卡名称= p_table
* FIELDNAME = FIELDNM
langu = sy-langu
* LFIELDNAME =''
* ALL_TYPES =' '
*导入
* X030L_WA = WATAB
* DDOBJTYPE =
* DFIES_WA =
* LINES_DESCR =
表格
dfies_tab = inttab
* FIXED_VALUES =
例外情况
not_found = 1
internal_error = 2
其他=3。



PERFORM popup_display。

ENDIF。

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

*用于弹出式选择的字段目录
清除ls_fieldcat。
ls_fieldcat-row_pos ='1'。
ls_fieldcat-col_pos ='1'。
ls_fieldcat-fieldname ='检查'。
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'。< br> 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

开始选择。

进行选择。
*执行下载。


*&--------- -------------------------------------------------- ---------- *
*&SELEC
表格*&--------------------------- ------------------------------------------ *
*文字
* ------------------------------------------------ ---------------------- *
*-> p1文本
* <-p2文本
* ----- -------------------------------------------------- --------------- **
FORM SELECT。

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

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


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

并按空格分隔lv_temp wa_tab-fieldname INTO lv_temp。

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

* do。
* SELECT(lv_temp)FROM(p_table)
* INTO 表的对应字段包大小1000。


OPEN CURSOR s_cursor FOR
从(p_table)中选择(lv_temp)。
DO。
获取下一个光标s_cursor追加表 软件包大小1000。
如果sy-subrc <>0。
关闭CURSOR s_cursor。
*提高no_more_data。
退出。
ENDIF。
执行下载。
> ENDDO。







* LOOP AT inttab1 INTO wa_tab1。< br> **从(p_table)中选择(wa_tab1)
** INTO C 表的对应字段。 "根据选定的字段(即wa_tab1
**清除wa_tab1。
* ENDLOOP。
* ENDSELECT。
*执行下载。
* enddo。

ENDIF)来获取记录 。


ENDFORM。
*&--------------------------------- ------------------------------------ *
*&表格下载
*&- -------------------------------------------------- ------------------ *
*文字
* ---------------------- ------------------------------------------------ * < br> *-> p1文本
* <-p2文本
* ----------------------------- ----------------------------------------- **
FORM下载。
* DATA:cnt TYPE字符串。"以在fi_itab
中加载1000条记录DATA:d TYPE字符串。 "创建多个excel ex export1 export2文件。...
DATA:文件类型字符串。"将p_file转换为字符串
file = p_file。
d =0。
* cnt = 0。
*
* LOOP AT 分配。 "包含所有记录的原始表
*
* ASSIGN TO
* APPEND TO
* cnt = cnt + 1.
*
*如果cnt> 1000.
d = d + 1.

并连接'C:\ Users \ vbirajda \ Desktop \ export'd'.xls'到文件中。
调用功能 'GUI_DOWNLOAD'
导出
* BIN_FILESIZE =
文件名=文件
文件类型='DAT'
append ='X'
write_field_separator ='X'
* HEADER =' 00'
* TRUNC_TRAILING_BLANKS =''
* WRITE_LF ='X'
* COL_SELECT =''
* COL_SELECT_MASK =''
* DAT_MODE =''
* CONFIRM_OVERWRITE =' '
* NO_AUTH_CHECK =''
*代码页=''
* IGNORE_CERR = ABAP_TRUE
*替换='#'
* WRITE_BOM =''
* TRUNC_TRAILING_BLANKS_EOL ='X'
* WK1_N_FORMAT =''
* WK1_N_SIZE =''
* WK1_T_FORMAT =''
* WK1_T_SIZE =''
* WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE
* SHOW_TRANSFER_STATUS = AP VIRUS_SCAN_PROFILE ='/SCET/GUI_DOWNLOAD'
*导入
*文件 ENGTH =
TABLES
data_tab =
字段名称= it_header
*例外情况
* FILE_WRITE_ERROR = 1
* NO_BATCH = 2
* GUI_REFUSE_FILETRANSFER = 3
* INVALID_TYPE = 4
* NO_AUTHORITY = 5
* UNKNOWN_ERROR = 6
* HEADER_NOT_ALLOWED = 7
* SEPARATOR_NOT_ALLOWED = 8
* FILESIZE_NOT_ALLOWED = 9
* HEADER_TOO_LONG = 10 = 11
* DP_ERROR_SEND = 12
* DP_ERROR_WRITE = 13
* UNKNOWN_DP_ERROR = 14
* ACCESS_DENIED = 15
* DP_OUT_OF_MEMORY = 16
* DISK_FULL = 17
* DP_TIMEOUT = 18
* FILE_NOT_FOUND = 19
* DATAPROVIDER_EXCEPTION = 20
* CONTROL_FLUSH_ERROR = 21
*其他= 22

如果sy-subrc <> 0.
*实现适当 错误处理此处
ENDIF。



* cnt =0。
*循环分配
* DELETE
* ENDLOOP。
* ENDIF。

* ENDLOOP。






ENDFORM。

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

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



报告zaa_fdatexta1。

DATA:ls_fieldcat TYPE slis_fieldcat_alv,
lt_fieldcat TYPE slis_t_fieldcat_alv,
ls_fieldcatlog TYPE slis_fieldcat_alv,

数据:w_dref对数据的引用类型。
字段符号: TYPE STANDARD TABLE,"动态内部表,用于从数据库读取数据。
TYPE类型。
< br> DATA:w_dref1数据的类型引用。
字段符号: TYPE STANDARD TABLE,"从t_itab加载1000条记录的表
TYPE ANY。

TYPES: 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选项卡名OBLIGATORY。
参数:p_file类似于rlgrap文件名DEFAULT'C:\ Users \ aaalve \ Desktop \ export.xls'。
参数:p_enable AS CHECKBOX DEFAULT''USER-COMMAND uc1。
数据s_cursor类型光标。


在选择屏幕输出处。

如果p_enable ='X'。
调用 FUNCTION'DDIF_FIELDINFO_GET'"以获取表字段信息
导出
选项卡名称= p_table
* FIELDNAME = FIELDNM
langu = sy-langu
* LFIELDNAME =''
* ALL_TYPES =' '
*导入
* X030L_WA = WATAB
* DDOBJTYPE =
* DFIES_WA =
* LINES_DESCR =
表格
dfies_tab = inttab
* FIXED_VALUES =
例外情况
not_found = 1
internal_error = 2
其他=3。



PERFORM popup_display。

ENDIF。

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

*用于弹出式选择的字段目录
清除ls_fieldcat。
ls_fieldcat-row_pos ='1'。
ls_fieldcat-col_pos ='1'。
ls_fieldcat-fieldname ='检查'。
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'。< br> 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

开始选择。

进行选择。
*执行下载。


*&--------- -------------------------------------------------- ---------- *
*&SELEC
表格*&--------------------------- ------------------------------------------ *
*文字
* ------------------------------------------------ ---------------------- *
*-> p1文本
* <-p2文本
* ----- -------------------------------------------------- --------------- **
FORM SELECT。

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

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


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

并按空格分隔lv_temp wa_tab-fieldname INTO lv_temp。

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

* do。
* SELECT(lv_temp)FROM(p_table)
* INTO 表的对应字段包大小1000。


OPEN CURSOR s_cursor FOR
从(p_table)中选择(lv_temp)。
DO。
获取下一个光标s_cursor追加表 软件包大小1000。
如果sy-subrc <>0。
关闭CURSOR s_cursor。
*提高no_more_data。
退出。
ENDIF。
执行下载。
> ENDDO。







* LOOP AT inttab1 INTO wa_tab1。< br> **从(p_table)中选择(wa_tab1)
** INTO C 表的对应字段。 "根据选定的字段(即wa_tab1
**清除wa_tab1。
* ENDLOOP。
* ENDSELECT。
*执行下载。
* enddo。

ENDIF)来获取记录 。


ENDFORM。
*&--------------------------------- ------------------------------------ *
*&表格下载
*&- -------------------------------------------------- ------------------ *
*文字
* ---------------------- ------------------------------------------------ * < br> *-> p1文本
* <-p2文本
* ----------------------------- ----------------------------------------- **
FORM下载。
* DATA:cnt TYPE字符串。"以在fi_itab
中加载1000条记录DATA:d TYPE字符串。 "创建多个excel ex export1 export2文件。...
DATA:文件类型字符串。"将p_file转换为字符串
file = p_file。
d =0。
* cnt = 0。
*
* LOOP AT 分配。 "包含所有记录的原始表
*
* ASSIGN TO
* APPEND TO
* cnt = cnt + 1.
*
*如果cnt> 1000.
d = d + 1.

并连接'C:\ Users \ vbirajda \ Desktop \ export'd'.xls'到文件中。
调用功能 'GUI_DOWNLOAD'
导出
* BIN_FILESIZE =
文件名=文件
文件类型='DAT'
append ='X'
write_field_separator ='X'
* HEADER =' 00'
* TRUNC_TRAILING_BLANKS =''
* WRITE_LF ='X'
* COL_SELECT =''
* COL_SELECT_MASK =''
* DAT_MODE =''
* CONFIRM_OVERWRITE =' '
* NO_AUTH_CHECK =''
*代码页=''
* IGNORE_CERR = ABAP_TRUE
*替换='#'
* WRITE_BOM =''
* TRUNC_TRAILING_BLANKS_EOL ='X'
* WK1_N_FORMAT =''
* WK1_N_SIZE =''
* WK1_T_FORMAT =''
* WK1_T_SIZE =''
* WRITE_LF_AFTER_LAST_LINE = ABAP_TRUE
* SHOW_TRANSFER_STATUS = AP VIRUS_SCAN_PROFILE ='/SCET/GUI_DOWNLOAD'
*导入
*文件 ENGTH =
TABLES
data_tab =
字段名称= it_header
*例外情况
* FILE_WRITE_ERROR = 1
* NO_BATCH = 2
* GUI_REFUSE_FILETRANSFER = 3
* INVALID_TYPE = 4
* NO_AUTHORITY = 5
* UNKNOWN_ERROR = 6
* HEADER_NOT_ALLOWED = 7
* SEPARATOR_NOT_ALLOWED = 8
* FILESIZE_NOT_ALLOWED = 9
* HEADER_TOO_LONG = 10 = 11
* DP_ERROR_SEND = 12
* DP_ERROR_WRITE = 13
* UNKNOWN_DP_ERROR = 14
* ACCESS_DENIED = 15
* DP_OUT_OF_MEMORY = 16
* DISK_FULL = 17
* DP_TIMEOUT = 18
* FILE_NOT_FOUND = 19
* DATAPROVIDER_EXCEPTION = 20
* CONTROL_FLUSH_ERROR = 21
*其他= 22

如果sy-subrc <> 0.
*实现适当 错误处理此处
ENDIF。



* cnt =0。
*循环分配
* DELETE
* ENDLOOP。
* ENDIF。

* ENDLOOP。






ENDFORM。

付费偷看设置
发送
8条回答
SAP小黑
1楼-- · 2020-09-01 10:56

在使用程序包大小时,请使用select endselect语句。

选择*从到表包大小1000的/附加表的相应字段中。

ENDSELECT。

此外,在关系数据库中没有索引的概念,因此我建议首先选择所有记录,然后遍历记录,以使您的excel充满1000条记录。

CJones
2楼-- · 2020-09-01 11:07

请不要发布无用的代码,如注释的代码行。

闻人可可
3楼-- · 2020-09-01 10:53

嗨,请清楚地描述您的问题。无法理解您的问题是什么 完全面对。

悠然的二货
4楼-- · 2020-09-01 10:53

告诉我们您面临的问题是什么?

5楼-- · 2020-09-01 11:14

我想将数据加载到excel文件中。 每个excel文件应包含1000条记录,并且必须通过在abap中使用select语句来完成要求。但是使用此代码,我可以获取所有记录,而不是每个文件中的1000条记录。

灬番茄
6楼-- · 2020-09-01 11:01

嗨,请务必提及您的要求。

一周热门 更多>