Если таблицы большого объема,
то я лично скидываю их через буфер обмена:
Code:
DATA: BEGIN OF ZAP OCCURS 0,
Z1,
Z2,
Z3,
END OF ZAP. "Таблица с данными
DATA: BEGIN OF T_EXCEL,
LINE(4096) TYPE C,
END OF T_EXCEL. "Табличка для вывода в Excel
CONSTANTS: GC_HEX_TAB TYPE X VALUE 9.
DATA: LD_SEPARATOR TYPE C.
FIELD-SYMBOLS: <FIELD>.
Code:
ASSIGN LD_SEPARATOR TO <FIELD> TYPE 'X'.
<FIELD> = GC_HEX_TAB. "Сформировали разделитель ячеек
Code:
...
"Заполняем данными табличку ZAP
...
Code:
LOOP AT ZAP.
CONCATENATE ZAP-Z1 ZAP-Z2 ZAP-Z3 INTO T_EXCEL-LINE
SEPARATED BY LD_SEPARATOR.
APPEND T_EXCEL.
END OF ZAP.
"Заполнили табличку для выгрузки в Excel,
"если нужно пропускать ячейки, то дополнить строку в нужном
"месте LD_SEPARATOR-ом
Code:
CALL FUNCTION 'CLPB_EXPORT'
TABLES
DATA_TAB = EXCEL_TAB
EXCEPTIONS
CLPB_ERROR = 1
OTHERS = 2. "Выгрузили табличку в буфер обмена
Code:
CREATE OBJECT H_EXCEL 'EXCEL.APPLICATION'.
SET PROPERTY OF H_EXCEL 'Visible' = 1.
CALL METHOD OF H_EXCEL 'Workbooks' = H_MAPL.
CALL METHOD OF H_MAPL 'Open'
EXPORTING
#1 = ZFILENAME.
CALL METHOD OF H_EXCEL 'Worksheets' = H_SHEET
EXPORTING
#1 = NLIST.
CALL METHOD OF H_SHEET 'Activate'.
CALL METHOD OF H_SHEET 'RANGE' = RANGE
EXPORTING
#1 = 'A1'. "Начальная ячейка для выгрузки
CALL METHOD OF RANGE 'SELECT'.
CALL METHOD OF H_SHEET 'PASTE'. "Выгружаем содержимое буфера
Преимущество такого способа, несмотря на его громоздкость -
огромная скорость проверка 90-100 листах показала, что требуется считанные секунды