我正在使用 SALV 来显示内部表。 因此,我优化列并设置列文本。 当 SALV 显示时,列标题始终显示短文本,因为列中的值只是一个boole_d ('X'(。
我尝试SET_OUTPUT_LENGTH设置固定的列宽。还删除了 短文本,仅添加中文本或长文本。 该列保持较小以显示长文本。
最初的报告是由其他人写的,我不得不调整一些列。 所以工厂方法被调用了两次,但我不太确定为什么。 不知道这是否会导致配置出现一些错误。
有人有同样的问题吗? 我添加了一些代码来生成 ALV。
[...]
END-OF-SELECTION.
"sALV nach Pernr erzeugen
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_tabpernr
CHANGING
t_table = gt_result.
DATA: go_tabpernr TYPE REF TO cl_salv_table.
DATA: go_tabdepart TYPE REF TO cl_salv_table.
go_tabpernr->get_columns( )->set_optimize( abap_true ).
"Überschrift mitgeben
go_tabpernr->get_columns( )->get_column( 'TEXT01')->set_medium_text( 'Department' ).
go_tabpernr->get_columns( )->get_column( 'AUSTRITT')->set_medium_text( 'Austritt' ).
go_tabpernr->get_columns( )->get_column( 'AUSTRITT')->set_short_text( 'Aust.' ).
go_tabpernr->get_columns( )->get_column( 'LZK')->set_short_text( 'LZK' ).
go_tabpernr->get_columns( )->get_column( 'LZK')->set_medium_text( 'Langzeitkrank' ).
go_tabpernr->get_columns( )->get_column( 'AUSGESTEUERT')->set_medium_text( 'Ausgesteuert' ).
go_tabpernr->get_columns( )->get_column( 'AUSGESTEUERT')->set_short_text( 'Aus.' ).
go_tabpernr->get_columns( )->get_column( 'WEINGLIED')->set_short_text( 'Eingl.' ).
go_tabpernr->get_columns( )->get_column( 'WEINGLIED')->set_medium_text( 'Wiedereingl.' ).
go_tabpernr->get_columns( )->get_column( 'WEINGLIED')->set_long_text( 'Wiedereingliederung' ).
go_tabpernr->get_columns( )->get_column( 'NPLUS_TEXT')->set_medium_text( 'N+' ).
go_tabpernr->get_columns( )->get_column( 'NPLUS_TEXT')->set_short_text( 'N+' ).
"Darstellung anpassen
go_tabpernr->get_display_settings( )->set_striped_pattern( abap_true ).
"Funktionen freischalten
go_tabpernr->get_functions( )->set_all( abap_true ).
"Gruppierung und Sortierung
SORT gt_result BY pernr DESCENDING . "endda
go_tabpernr->get_sorts( )->clear( ).
""ALV für Department erzeugen (gleiches Vorgehen wie nach pernr)
"sALV erzeugen
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = go_tabdepart
CHANGING
t_table = gt_result.
go_tabpernr->display( ).
可以通过对列使用方法 SET_OUTPUT_LENGTH 来强制列的宽度。例如:
DATA(lo_column) = go_tabpernr->get_columns( )->GET_COLUMN( 'LZK' ).
lo_column->SET_MEDIUM_TEXT( 'Langzeitkrank' ).
lo_column->SET_OUTPUT_LENGTH( '20' ).
为了使其正常工作,我必须将设置列优化设置为 false。cl_salv_column类上还有一个SET_OPTIMIZED方法。您可能需要为每列设置此项才能获得所需的效果。下面的帖子将更多地讨论如何使用这些SET_OPTIMIZE和SET_OPTIMIZED以及它们如何与 ALV 网格的总体布局配合使用。
根据这个: https://archive.sap.com/discussions/thread/220953 似乎需要(在手动设置短/中/长文本的情况下(定义所有三个,而不仅仅是短文本或短/中。总是他们三个。 你能试一试吗?
我读了你的线程并像这样解决问题:
- 我设置列优化;
- 在获取代码中的列数据后,我将短文本和中间文本设置为空值;
- 然后我使用set_fixed_header_text方法制作了与"wa_fieldcat-ddictxt = 'L'"类似的效果,但是现在想到我做了这么多测试,以至于我不确定这部分是否真的有必要,请尝试没有它并检查您是否获得了带有标题完整文本的 excel。
lo_columns = lo_alv->get_columns( ).
lo_columns->set_optimize( ).
lo_col_ref = lo_columns->get( ).
LOOP AT lo_col_ref ASSIGNING <fs_col_ref>.
<fs_col_ref>-r_column->set_short_text( '' ).
<fs_col_ref>-r_column->set_medium_text( '' ).
CALL METHOD <fs_col_ref>-r_column->set_fixed_header_text
EXPORTING
value = 'L'.
ENDLOOP.