2013-05-23 1 views
1

У меня есть код SAP OLE, который берет внутреннюю таблицу и вставляет ее в excel. Однако для одного поля требуется две строки внутри одной ячейки.Несколько строк в одной ячейке excel с использованием OLE

Я пробовал использовать CL_ABAP_CHAR_UTILITIES-NEWLINE и CL_ABAP_CHAR_UTILITIES-VERTICAL TAB и символ "CR_LF" в качестве символов возврата каретки, и они отлично работают при настройке значения ячейки отдельно, но с помощью метода paste запускают новую строку (не новая строка в той же ячейке). К сожалению, установка значений ячеек вручную слишком высокая, чтобы быть полезной.

Я также попытался запись макроса альта + обратный ключ, который показывает мне, что первенствовать гласит, что, как = «LINE1» & CHAR (10) & «line2», но я не могу получить это правильно разобрать либо используя OLE.

Можно ли каким-либо образом заставить метод пасты разбора символов возврата символов правильно?

Мой нынешний подход ниже. Спасибо за любую помощь.

CONCATENATE line1 line2 INTO mult_lines SEPARATED BY cl_abap_char_utilities=>newline. 

Затем добавить mult_lines к внутренней таблице и конкатенации каждой строки внутренней таблицы в gt_data [], который типа: как и таблицу OF gv_data (4096) Тип С.

CALL METHOD cl_gui_frontend_services=>clipboard_export 
IMPORTING 
    data     = gt_data[] 
CHANGING 
    rc     = gv_rc 
EXCEPTIONS 
    cntl_error   = 1 
    error_no_gui   = 2 
    not_supported_by_gui = 3 
    OTHERS    = 4. 

CALL METHOD OF gv_appl 'Cells' = gv_cell 
EXPORTING 
#1 = lv_row1 
#2 = lv_col1. 

CALL METHOD OF gv_appl 'Range' = gv_range 
EXPORTING 
#1 = gv_cell 
#2 = gv_cell. 

CALL METHOD OF gv_range 'Select'. 
CALL METHOD OF gv_sheet 'Paste'. 
+0

Проблема может быть, что Excel интерпретирует возврат каретки в качестве инструкции, чтобы вставить к следующей строке. Подобно тому, как если вы введете «Блок 1» <возврат каретки> «Строка 2» в блокнот, скопируйте его и вставьте в Excel, «Строка 1» и «Строка 2» вставляются в разные строки. Согласуется ли это с результатами, которые вы видите? –

+0

Да, это согласуется с тем, что я вижу - я думаю, что это то, что происходит - любая идея, как я могу ее изменить? – db579

+0

Персонаж, который вы ищете, является эквивалентом «SHIFT-ENTER» в Word/Excel. Однако я понятия не имею, как это будет представлено в ABAP. – Esti

ответ

2

Двойные кавычки решают проблему. Просто дважды укажите весь текст, который вы хотите поместить в одну ячейку, и соедините ячейки с 0x09 (следующая колонка) или 0x0A (следующая строка)

Например: (я использую код ASCII для обозначения символов) Оклейка 0x41 0x0A 0x42 в клетку, мы заполняем две соседние строки, одну строку текста в каждой,

A 
B 

при вставке 0x22 0x41 0x0A 0x42 0x22 в клетку, мы заполняем одну ячейку с 2 линиями.

"A 
B" 

В приведенном ниже примере заполняет к клеткам с 2 строками в каждой:

CONSTANTS: 
    nextC TYPE abap_char1 VALUE cl_abap_char_utilities=>horizontal_tab, 
    nextR TYPE abap_char1 VALUE cl_abap_char_utilities=>newline, 
    quot TYPE abap_char1 VALUE '"'. 

DATA: 
    buffer TYPE string. 

CONCATENATE quot 'R1C1L1' nextR 'R1C1L2' quot nextC quot 'R1C2L1' nextR 'R1C2L2' quot INTO buffer. 
+0

. Как скопировать подготовленный текст, если вы не можете использовать cl_GUI_frontend_services => буфер обмена? Также могут ли символы ASCII буквально быть добавлены в виде строки? – db579

+0

Извините, что мне нужно исправить себя, что cl_gui_frontend_services => clipboard_export по-прежнему необходим. Просто переработал мой пост с примером. Надеюсь, поможет. – zhaow

+0

Отлично работает, спасибо! – db579

0

Это будет работать только клетки на клетку, но вы можете попробовать использовать Application.SendKeys "{F2}", который откроет редактирования бара, а затем сделать пасту из нескольких линий. Это должно работать, но я не рекомендую это делать. Почему бы вам просто не установить значение через установку значения ячейки?

+0

Слишком высокая производительность. Для количества ячеек, которые я пытаюсь сделать для установки каждой ячейки, требуется несколько минут. – db579