粘贴板导出EXCEL数据

&---------------------------------------------------------------------
*& Report ZTEST002
&---------------------------------------------------------------------
*&Description: 用粘贴板导出EXCEL数据
&---------------------------------------------------------------------
REPORT ZTEST002.

TABLES BKPF.
TYPE-POOLS:SLIS,OLE2.
TYPES:
BEGIN OF TYP_BKPF,
BUKRS TYPE BUKRS,
BELNR TYPE BELNR_D,
GJAHR TYPE GJAHR,
BLART TYPE BLART,
BUDAT TYPE BUDAT,
MONAT TYPE MONAT,
TCODE TYPE TCODE,
END OF TYP_BKPF.

DATA: GT_BKPF TYPE TABLE OF TYP_BKPF,
GS_BKPF TYPE TYP_BKPF.

DATA: V_EXCEL TYPE OLE2_OBJECT,
V_BOOK TYPE OLE2_OBJECT,
V_SHEET TYPE OLE2_OBJECT,
V_CELL TYPE OLE2_OBJECT.

*屏幕
SELECT-OPTIONS:
S_BUKRS FOR BKPF-BUKRS,
S_BELNR FOR BKPF-BELNR,
S_GJAHR FOR BKPF-GJAHR,
S_MONAT FOR BKPF-MONAT.

START-OF-SELECTION.
PERFORM FRM_GET_BKPF_DATA.
PERFORM FRM_DOWN_DATA.
&---------------------------------------------------------------------
*& Form FRM_GET_BKPF_DATA
&---------------------------------------------------------------------
FORM FRM_GET_BKPF_DATA .

SELECT BUKRS
BELNR
GJAHR
BLART
BUDAT
MONAT
TCODE
INTO TABLE GT_BKPF
FROM BKPF
WHERE BUKRS IN S_BUKRS
AND BELNR IN S_BELNR
AND GJAHR IN S_GJAHR
AND MONAT IN S_MONAT.
ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_DOWN_DATA
&---------------------------------------------------------------------
FORM FRM_DOWN_DATA .
DATA:
L_NAME LIKE WWWDATATAB,
L_MINE LIKE W3MIME OCCURS 10,
L_TITLE TYPE STRING,
L_FILENAME TYPE STRING,
L_PATH TYPE STRING,
L_FULLPATH TYPE STRING.

L_NAME-RELID = ‘MI’.
L_NAME-OBJID = ‘ZTEST002’.
L_NAME-TEXT = ‘粘贴板测试’.

CALL FUNCTION ‘WWWDATA_IMPORT’
EXPORTING
KEY = L_NAME
TABLES
MIME = L_MINE
EXCEPTIONS
WRONG_OBJECT_TYPE = 1
IMPORT_ERROR = 2
OTHERS = 3.

L_TITLE = ‘粘贴板测试’.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE = L_TITLE
DEFAULT_EXTENSION = ‘xls’
DEFAULT_FILE_NAME = L_TITLE
FILE_FILTER = ‘(电子表格EXCEL)’
CHANGING
FILENAME = L_FILENAME
PATH = L_PATH
FULLPATH = L_FULLPATH
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0.
STOP.
ENDIF.

IF L_FULLPATH IS INITIAL.
EXIT.
ENDIF.

CALL FUNCTION ‘SAPGUI_PROGRESS_INDICATOR’
EXPORTING
PERCENTAGE = ‘0’
TEXT = ‘正在导出EXCEL’.

CALL FUNCTION ‘GUI_DOWNLOAD’
EXPORTING
FILENAME = L_FULLPATH
FILETYPE = ‘BIN’
TABLES
DATA_TAB = L_MINE.

*–打开excel模板

PERFORM FRM_OPEN_EXCEL USING L_FULLPATH.

*–向excel写数据

PERFORM FRM_WRITE_EXCEL_SHEET TABLES GT_BKPF[].

*–设置excel可见

CALL METHOD OF V_EXCEL ‘Worksheets’ = V_SHEET
EXPORTING
#1 = 1.
CALL METHOD OF V_SHEET ‘Activate’.
SET PROPERTY OF V_EXCEL ‘Visible’ = 1.

*关闭EXCEL并保存

PERFORM FRM_SAVE_EXCEL USING L_FULLPATH.

ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_OPEN_EXCEL
&---------------------------------------------------------------------
FORM FRM_OPEN_EXCEL USING PA_PATH.
CREATE OBJECT V_EXCEL ‘Excel.Application’.

CALL METHOD OF V_EXCEL ‘Workbooks’ = V_BOOK.

CALL METHOD OF V_BOOK ‘Open’ = V_BOOK
EXPORTING
#1 = PA_PATH.

CALL METHOD OF V_BOOK ‘Sheets’ = V_SHEET
EXPORTING
#1 = 1.
ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_WRITE_EXCEL_SHEET
&---------------------------------------------------------------------
FORM FRM_WRITE_EXCEL_SHEET TABLES PT_TAB LIKE GT_BKPF.
DATA: L_STR TYPE STRING,
CH TYPE CHAR20,
L_RC TYPE I.
DATA: LW_XFC TYPE LVC_S_FCAT,
LI_IFC TYPE LVC_T_FCAT.
DATA: BEGIN OF LI_DATA OCCURS 0,
LINE(4096),
END OF LI_DATA.
DATA: L_FGF TYPE C.
DATA: DY_TABLE TYPE REF TO DATA,
DY_LINE TYPE REF TO DATA.
FIELD-SYMBOLS:<DYN_TABLE> TYPE STANDARD TABLE, "动态内表
<DYN_WA>, "动态工作区
<DYN_FIELD>. "动态字段名

L_FGF = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.

LW_XFC-FIELDNAME = ‘BUKRS’.
LW_XFC-INTTYPE = ‘C’.
LW_XFC-DATATYPE = ‘C’.
LW_XFC-INTLEN = 4.
APPEND LW_XFC TO LI_IFC.

LW_XFC-FIELDNAME = ‘BELNR’.
LW_XFC-INTTYPE = ‘C’.
LW_XFC-DATATYPE = ‘C’.
LW_XFC-INTLEN = 10.
APPEND LW_XFC TO LI_IFC.

LW_XFC-FIELDNAME = ‘GJAHR’.
LW_XFC-INTTYPE = ‘C’.
LW_XFC-DATATYPE = ‘C’.
LW_XFC-INTLEN = 4.
APPEND LW_XFC TO LI_IFC.

LW_XFC-FIELDNAME = ‘BLART’.
LW_XFC-INTTYPE = ‘C’.
LW_XFC-DATATYPE = ‘C’.
LW_XFC-INTLEN = 4.
APPEND LW_XFC TO LI_IFC.

LW_XFC-FIELDNAME = ‘BUDAT’.
LW_XFC-INTTYPE = ‘C’.
LW_XFC-DATATYPE = ‘C’.
LW_XFC-INTLEN = 10.
APPEND LW_XFC TO LI_IFC.

LW_XFC-FIELDNAME = ‘MONAT’.
LW_XFC-INTTYPE = ‘C’.
LW_XFC-DATATYPE = ‘C’.
LW_XFC-INTLEN = 2.
APPEND LW_XFC TO LI_IFC.

LW_XFC-FIELDNAME = ‘TCODE’.
LW_XFC-INTTYPE = ‘C’.
LW_XFC-DATATYPE = ‘C’.
LW_XFC-INTLEN = 20.
APPEND LW_XFC TO LI_IFC.

*创建动态内表和工作区

CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = LI_IFC
IMPORTING
EP_TABLE = DY_TABLE.

ASSIGN DY_TABLE->* TO <DYN_TABLE>.
CREATE DATA DY_LINE LIKE LINE OF <DYN_TABLE>.
ASSIGN DY_LINE->* TO <DYN_WA>.

LOOP AT PT_TAB.
ASSIGN COMPONENT ‘BUKRS’ OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = PT_TAB-BUKRS.

ASSIGN COMPONENT ‘BELNR’ OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = PT_TAB-BELNR.

ASSIGN COMPONENT ‘GJAHR’ OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = PT_TAB-GJAHR.

ASSIGN COMPONENT ‘BLART’ OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = PT_TAB-BLART.

ASSIGN COMPONENT ‘BUDAT’ OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = PT_TAB-BUDAT.

ASSIGN COMPONENT ‘MONAT’ OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = PT_TAB-MONAT.

ASSIGN COMPONENT ‘TCODE’ OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
<DYN_FIELD> = PT_TAB-TCODE.
APPEND <DYN_WA> TO <DYN_TABLE>.
ENDLOOP.
LOOP AT <DYN_TABLE> INTO <DYN_WA>.
LOOP AT LI_IFC INTO LW_XFC.
ASSIGN COMPONENT SY-TABIX OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
CH = <DYN_FIELD>.
CONDENSE CH.
IF LI_DATA-LINE IS INITIAL.
CONCATENATE LI_DATA-LINE CH L_FGF INTO LI_DATA-LINE.
CLEAR CH.
ELSE.
CONCATENATE LI_DATA-LINE CH L_FGF INTO LI_DATA-LINE.
CLEAR CH.
ENDIF.
ENDLOOP.
APPEND LI_DATA.
CLEAR:LI_DATA.

ENDLOOP.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>CLIPBOARD_EXPORT
IMPORTING
DATA = LI_DATA[]
CHANGING
RC = L_RC
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 5.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

CALL METHOD OF
V_SHEET
‘CELLS’ = V_CELL
EXPORTING
#1 = 2
#2 = 1.

CALL METHOD OF
V_CELL
‘SELECT’.

CALL METHOD OF
V_SHEET
‘PASTE’.

ENDFORM.
FORM FRM_SAVE_EXCEL USING P_FULLPATH.
SET PROPERTY OF V_EXCEL ‘DisplayAlerts’ = 0.
CALL METHOD OF V_BOOK ‘SAVEAS’
EXPORTING
#1 = P_FULLPATH.

CALL METHOD OF V_BOOK ‘Exit’ = V_EXCEL.

  • CALL METHOD OF V_BOOK ‘QUIT’.
  • CALL METHOD OF V_EXCEL ‘QUIT’.

FREE OBJECT V_CELL.
FREE OBJECT V_SHEET.
FREE OBJECT V_BOOK.
FREE OBJECT V_EXCEL.
ENDFORM. "FRM_SAVE_EXCEL

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python的openpyxl库来读取和操作Excel文件,使用pyperclip库来操作剪贴板。下面是一个示例代码,可以将Excel文件中第一个工作表中第一行第一列的数据复制到剪贴板: ```python import openpyxl import pyperclip # 打开Excel文件 workbook = openpyxl.load_workbook('example.xlsx') # 选择第一个工作表 sheet = workbook.active # 获取第一行第一列的单元格对象 cell = sheet.cell(row=1, column=1) # 将单元格的值复制到剪贴板 pyperclip.copy(cell.value) ``` 在这个示例中,使用openpyxl库打开Excel文件,并选择第一个工作表。然后,使用cell方法获取第一行第一列的单元格对象,并使用pyperclip库将单元格的值复制到剪贴板。最后,可以在其他程序中使用Ctrl + V来粘贴剪贴板中的值。 注意,使用pyperclip库需要先安装xclip或xsel(在Linux中),或者pyobjc(在Mac OS X中)等剪贴板工具。在Windows中,可以直接使用pyperclip库。你可以使用pip来安装pyperclip库: ```bash pip install pyperclip ``` 完整的示例代码如下: ```python import openpyxl import pyperclip # 打开Excel文件 workbook = openpyxl.load_workbook('example.xlsx') # 选择第一个工作表 sheet = workbook.active # 获取第一行第一列的单元格对象 cell = sheet.cell(row=1, column=1) # 将单元格的值复制到剪贴板 pyperclip.copy(cell.value) ``` 这个示例中,使用openpyxl库读取Excel数据,并使用pyperclip库将单元格的值复制到剪贴板。你可以根据具体的需求使用openpyxl库和pyperclip库提供的更多方法来处理Excel数据和剪贴板。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值