WEBUI 下载格式更改为 xlsx

作者:郑德鼎 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, 开发, 数据工程
WEBUI 下载格式更改为 xlsx - 封面图
WEBUI 下载格式更改为 xlsx - 封面图

webui除了通过导出组件上传的mime模板文件 一般的下载默认的下载格式是csv的

WEBUI 下载格式更改为 xlsx - 封面图
WEBUI 下载格式更改为 xlsx - 封面图

我们去sicf服务中在default_host/sap/crm/中可以看到系统使用的导出到 Excel 的服务是export_to_excel

使用的处理器是CL_CHTMLB_CONFIG_TAB_EXCEL_EXP

可以看到 lv_content_type = 'text/csv; charset=UTF-16'. 限制了格式
WEBUI 下载格式更改为 xlsx - 封面图
WEBUI 下载格式更改为 xlsx - 封面图

如果要改成xlsx的话

只需要仿照export_to_excel 创建一个新的服务 将csv的代码更改成xlsx的代码 然后在html中调用就可以了。

这里默认系统已经导入过abap2xlsx了。

1\. 仿照export_to_excel创建服务 替换一下csv格式的相关代码

WEBUI 下载格式更改为 xlsx - 封面图
WEBUI 下载格式更改为 xlsx - 封面图
WEBUI 下载格式更改为 xlsx - 封面图
WEBUI 下载格式更改为 xlsx - 封面图
WEBUI 下载格式更改为 xlsx - 封面图
WEBUI 下载格式更改为 xlsx - 封面图
METHOD export_as_excel.2. DATA:3. lv_content TYPE xstring,4. lo_excel TYPE REF TO zcl_excel,5. lo_excel_writer TYPE REF TO zif_excel_writer,6. lo_worksheet TYPE REF TO zcl_excel_worksheet,7. lr_zcl_excel TYPE REF TO zcx_excel,8. lv_error_text TYPE string.9. 10. DATA:11. lt_comp_tab TYPE cl_chtmlb_xml_provider=>chtmlb_tv_comp_descr_tab,12. lv_comp TYPE cl_chtmlb_xml_provider=>chtmlb_tv_comp_descr.13. 14. DATA: lt_config_tab TYPE bsp_dlc_column_descr_tab,15. lv_config_data TYPE bsp_dlc_column_descr.16. DATA:lv_blc_xml TYPE string.17. TRY.18. *Create active sheet19. CREATE OBJECT lo_excel.20. lo_worksheet = lo_excel->get_active_worksheet( ).21. 22. IF lo_worksheet IS NOT BOUND.23. lo_worksheet = lo_excel->add_new_worksheet( ).24. ENDIF.25. lo_worksheet->set_title( ip_title = 'ZLLG' ).26. 27. CATCH zcx_excel INTO lr_zcl_excel.28. lv_error_text = lr_zcl_excel->get_text( ).29. ENDTRY.30. 31. DATA:lr_blc_config TYPE REF TO cl_bsp_dlc_configuration2,32. lv_title TYPE bsp_dlc_element_id,33. lv_string TYPE string.34. 35. lr_blc_config ?= ir_view_controller->configuration_descr.36. lv_blc_xml = lr_blc_config->if_bsp_dlc_configuration~get_config_data( ).37. 38. *39. lt_config_tab = cl_bsp_dlc_table_utility=>get_table_from_config_xml( lv_blc_xml ).40. *41. *42. DATA: lv_first_column TYPE comt_boolean.43. 44. lv_first_column = abap_true.45. LOOP AT lt_config_tab INTO lv_config_data.46. 47. *//删除 “操作” 列48. IF lv_config_data-name = 'THTMLB_OCA'.49. DELETE lt_config_tab INDEX sy-tabix.50. CONTINUE.51. ENDIF.52. 53. 54. * 删除被个性化移除的列55. IF lv_config_data-hidden IS NOT INITIAL.56. DELETE lt_config_tab INDEX sy-tabix.57. CONTINUE.58. ENDIF.59. 60. 61. * 获得列名62. IF lv_config_data-title(2) <> '//'.63. IF lv_config_data-title IS NOT INITIAL.64. lv_comp-column_title = lv_config_data-title.65. ELSE.66. lv_comp-column_title = lv_config_data-name.67. ENDIF.68. ELSE.69. IF ir_view_descriptor IS BOUND.70. lv_title = lv_config_data-title.71. lv_comp-column_title = ir_view_descriptor->get_field_label( iv_element_id = lv_title iv_context_node = ir_context_node ).72. ENDIF.73. ENDIF.74. * 移除 'STRUCT'75. WHILE lv_config_data-name CA '.'.76. SPLIT lv_config_data-name AT '.' INTO lv_string lv_config_data-name.77. ENDWHILE.78. lv_comp-name = lv_config_data-name.79. IF lv_comp-column_title IS INITIAL.80. lv_comp-column_title = lv_config_data-name.81. ENDIF.82. 83. MODIFY lt_config_tab FROM lv_config_data.84. APPEND lv_comp TO lt_comp_tab.85. ENDLOOP.86. *87. *// 插入抬头表数据88. IF iv_no_title = abap_false.89. DATA: lv_column_alpha TYPE zexcel_cell_column_alpha,90. lv_column_index TYPE zexcel_cell_column,91. lv_value TYPE string.92. 93. 94. LOOP AT lt_comp_tab INTO lv_comp.95. 96. lv_column_index = sy-tabix.97. TRY.98. lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_column_index ).99. CATCH zcx_excel .100. ENDTRY.101. 102. lv_value = lv_comp-column_title.103. TRY.104. lo_worksheet->set_cell( ip_column = lv_column_alpha105. ip_row = 1106. ip_value = lv_value107. ip_abap_type = cl_abap_typedescr=>typekind_char ).108. CATCH zcx_excel .109. ENDTRY.110. ENDLOOP.111. ENDIF.112. 113. *//插入数据条目114. * -> 获得条目数115. DATA lr_model_tree TYPE REF TO cl_bsp_wd_context_node_tree.116. DATA lv_is_tree TYPE abap_bool.117. DATA lv_tree_indent TYPE string.118. DATA lv_tab_size TYPE i.119. 120. 121. * TRY.122. * lr_model_tree ?= ir_context_node.123. ** tree124. * lv_is_tree = abap_true.125. * lv_tab_size = lines( lr_model_tree->node_tab ).126. * CATCH: cx_root. "127. * table128. lv_is_tree = abap_false.129. lv_tab_size = ir_context_node->get_table_size( ).130. * ENDTRY.131. 132. *//133. DATA: lv_index TYPE i,134. lv_field_index TYPE i.135. FIELD-SYMBOLS: <ls_config> TYPE bsp_dlc_column_descr,136. <ls_ddlb_line> TYPE bsp_wd_dropdown_line,137. <lt_entries> TYPE bsp_wd_dropdown_table.138. 139. DATA: lv_field_name TYPE string,140. lv_field_name_xml TYPE string,141. lv_path TYPE string.142. DATA: lv_field_type TYPE string,143. lv_tooltip TYPE string.144. 145. DATA: lv_index_s TYPE string.146. DATA: lv_cell_value TYPE string.147. DATA: lr_valuehelp_descr TYPE REF TO if_bsp_wd_valuehelp_descriptor,148. lr_picklist_descr TYPE REF TO if_bsp_wd_valuehelp_pldescr,149. lt_picklist_values TYPE bsp_wd_dropdown_table.150. DATA: lv_pl_binding_string TYPE string,151. lv_pl_value_path TYPE string,152. lv_pl_model_name TYPE string,153. lv_pl_mod TYPE REF TO if_bsp_model_binding,154. lv_pl_object TYPE REF TO cl_bsp_wd_context_node_ddlb,155. lt_pl_entries TYPE REF TO bsp_wd_dropdown_table,156. lv_textlen TYPE i.157. DATA: lv_row_index TYPE i.158. 159. DO lv_tab_size TIMES.160. lv_index = sy-index.161. 162. LOOP AT lt_config_tab ASSIGNING <ls_config>.163. lv_field_index = sy-tabix.164. 165. lv_field_name = <ls_config>-name.166. lv_field_name_xml = cl_abap_xml_name_converter=>to_xml_name( lv_field_name ).167. 168. lv_index_s = lv_index.169. CONDENSE lv_index_s NO-GAPS.170. CONCATENATE `TABLE[` lv_index_s `].` lv_field_name INTO lv_path.171. 172. TRY.173. lv_cell_value = ir_context_node->get_t_table( attribute_path = lv_path174. index = lv_index175. component = lv_field_name ).176. CATCH cx_root.177. CONCATENATE lv_field_name ` not bound` INTO lv_cell_value. "178. ENDTRY.179. * -> check for special cell types180. * --> look for a picklist descriptor for this181. CLEAR lr_picklist_descr.182. TRY.183. lr_valuehelp_descr = ir_context_node->get_v_t_table( iv_index = lv_index184. component = lv_field_name ).185. IF lr_valuehelp_descr IS BOUND.186. lr_picklist_descr ?= lr_valuehelp_descr.187. ENDIF.188. CATCH cx_root.189. ENDTRY.190. * --> if a picklist descriptor exists, use the description instead of the value191. IF lr_picklist_descr IS BOUND.192. CASE lr_picklist_descr->source_type.193. WHEN if_bsp_wd_valuehelp_pldescr=>source_type_binding.194. * -> pick

...

郑德鼎

关于作者:郑德鼎

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「WEBUI下载格式更改为xlsx.md」整理生成,仅用于内部技术分享与学习交流。