ABAP学习(16):ABAP2XLSX,操做excel

ABAP2XLSX

    ABAP2XLS是一个操做EXCEL的开源项目,相比较OLE2和DOI方式操做excel更加方便。ios

    ABAP中搜索ZDEMO_EXCEL*搜索Program能够查看SAP提供的示例程序,实现多种Excel。windows

1.建立excel

    Excel类:zcl_excel类,表明一个excel文档;网络

    Worksheet类:zcl_excel_worksheet类,表明一个worksheet;app

    异常类:zcx_excel类,异常类;less

    超连接类:zcl_excel_hyperlink类,经过设置超连接可连接到指定sheet栏位或者打开网络连接;frontend

    建立excel过程:ide

    一、定义zcl_excel类对象对应变量lo_excel;字体

    二、CREATE OBJECT lo_excel,建立zcl_excel类对象;ui

    三、经过调用zcl_excel的get_active_sheet方法,获取当前活动sheet,当建立zcl_excel对象后,默认有一个worksheet处于活动;this

    四、调用add_new_worksheet方法,能够建立新的worksheet;

示例:

"excel文档类对象
DATA:lo_excel TYPE REF TO zcl_excel. "excel worksheet类对象
DATA:lo_worksheet TYPE REF TO zcl_excel_worksheet. "异常类
DATA:lf_cxexcel TYPE REF TO ZCX_EXCEL. "建立excel
FORM creat_excel. "excel超连接
  DATA:lo_hyperlink TYPE REF TO zcl_excel_hyperlink. TRY. "建立excel对象
      CREATE OBJECT lo_excel. "得到当前worksheet lo_worksheet = lo_excel->get_active_worksheet( ). "设置单元格 lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'hello world!' ). lo_worksheet->set_cell( ip_column = 'A' ip_row = 2 ip_value = sy-datum ). lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = sy-uzeit ). "建立超连接
      "外部连接 lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'https://www.baidu.com' ). lo_worksheet->set_cell( ip_column = 'A' ip_row = 4 ip_value = '百度一下' ip_hyperlink = lo_hyperlink ). "内部连接到其余sheet lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'itab!A1' ). lo_worksheet->set_cell( ip_column = 'A' ip_row = 5 ip_value = 'itab:A1' ip_hyperlink = lo_hyperlink ). CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

2.excel下载与显示

    Excel下载和显示须要将excel转换成xstring操做。

    经过类型zif_excel_writer的cl_writer对象,调用write_file方法,将zcl_excel对象转换成xstring。将xstring转换为solix_tab类型变量,方便显示和下载操做。

2.1将excel转换xstring

    使用zif_excel_writer类,若是须要下载成xlsx类型文档,建立实例化对象时类型为zcl_excel_writer_2007;经过write_file方法获取xstring类型数据;再将xstring类型data转换为solix_tab类型数据。

示例:

"下载显示excel转换
DATA:cl_writer TYPE REF TO zif_excel_writer. DATA:xdata TYPE xstring. DATA:t_rawdata TYPE solix_tab. DATA:bytecount TYPE i. "excel转换成xstring
FORM translate_excel. "实例化cl_writer对象
  CREATE OBJECT cl_writer TYPE zcl_excel_writer_2007. xdata = cl_writer->write_file( lo_excel ). * "方式1:convert to binary
* CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
* EXPORTING
* buffer = xdata
* IMPORTING
* output_length = bytecount
* TABLES
* binary_tab = t_rawdata.

  "方式2:This method is only available on AS ABAP > 6.40
  "excel转换 t_rawdata = cl_bcs_convert=>xstring_to_solix( iv_xstring  = xdata ). "统计字节数 bytecount = xstrlen( xdata ). ENDFORM.

2.2GUI直接显示excel

示例:

"在ABAP显示
FORM display_excel. DATA:error TYPE REF TO i_oi_error. DATA:t_errors TYPE STANDARD TABLE OF REF TO i_oi_error WITH NON-UNIQUE DEFAULT KEY. DATA:cl_control  TYPE REF TO i_oi_container_control. "OIContainerCtrl
  DATA:cl_document TYPE REF TO i_oi_document_proxy.   "Office Dokument
 c_oi_container_control_creator=>get_container_control( IMPORTING control = cl_control error = error ). APPEND error TO t_errors. cl_control->init_control( EXPORTING inplace_enabled = 'X' no_flush = 'X' r3_application_name = 'Demo Document Container' parent = cl_gui_container=>screen0 IMPORTING error = error EXCEPTIONS OTHERS = 2 ). APPEND error TO t_errors. cl_control->get_document_proxy( EXPORTING document_type = 'Excel.Sheet'                " EXCEL no_flush = ' '
    IMPORTING document_proxy = cl_document error = error ). APPEND error TO t_errors. cl_document->open_document_from_table( EXPORTING document_size = bytecount document_table = t_rawdata open_inplace = 'X' ). WRITE: '.'.  " To create an output. That way screen0 will exist
ENDFORM.

2.3导出excel到本地

    主要使用cl_gui_frontend_services=>gui_download方法下载。

示例:

"下载到本地
FORM download_excel. DATA:filepath TYPE String VALUE 'C:'. DATA:filename TYPE String VALUE 'abap2xlsx1'. "选择文件保存路径 cl_gui_frontend_services=>directory_browse( EXPORTING window_title = 'Select path to download EXCEL-file' initial_folder = filepath CHANGING selected_folder = filepath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4 ). filename = filepath && '\' && filename && '.XLSX'.
"下载excel cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = bytecount filename = filename filetype =
'BIN' CHANGING data_tab = t_rawdata ). ENDFORM.

2.4将excel保存为csv文件

    使用zif_excel_writer类,若是须要下载成csv类型文档,建立实例化对象时类型为zcl_excel_writer_csv;调用write_file方法将zcl_excel转换为xstring;再将xstring类型数据转换为solix_tab类型数据。这个是单个sheet下载,使用zcl_excel_writer_csv类对象的set_active_sheet_index()设置要下载的worksheet。

示例:

"excel转换下载成csv
FORM translate_csv. "cl_writer对象
  CREATE OBJECT cl_writer TYPE zcl_excel_writer_csv. zcl_excel_writer_csv=>set_delimiter( ip_value = cl_abap_char_utilities=>horizontal_tab ). zcl_excel_writer_csv=>set_enclosure( ip_value = '''' ). zcl_excel_writer_csv=>set_endofline( ip_value = cl_abap_char_utilities=>cr_lf ). "单个sheet写入,set_active_sheet_index_by_name( ) zcl_excel_writer_csv=>set_active_sheet_index( i_active_worksheet = 2 ). xdata = cl_writer->write_file( lo_excel ). "后续操做和excel一致,文件后缀.csv
ENDFORM.

2.5文件类型xlsm读写

    使用zif_excel_writer类,若是须要下载成xlsm类型文档,建立实例化对象时类型为zcl_excel_writer_xlsm.经过write_file方法获取xstring类型数据;再将xstring类型data转换为solix_tab类型数据。

    使用zif_excel_reader类,建立对象时类型为zcl_excel_reader_xlsm,经过类对象的load_file()方法加载xlsm类型文档。

示例:

"读写xlsm类型文档
FORM translate_xlsm. DATA:lo_excel_writer TYPE REF TO zif_excel_writer. DATA:lo_excel_reader TYPE REF TO zif_excel_reader. TRY . CREATE OBJECT lo_excel_reader TYPE zcl_excel_reader_xlsm. CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_xlsm. lo_excel = lo_excel_reader->load_file( '文件路径' ). xdata = lo_excel_writer->write_file( lo_excel ). "后续操做和excel一致,文件后缀.xlsm
    CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

2.6alv导出到excel

    使用zcl_excel_converter类导出alv到excel。

    一、建立zcl_excel_converter对象;

    二、调用convert方法,传入cl_salv_table和内表等参数;

    三、调用writer_file方法导出到excel;

示例1:

"使用zcl_excel_converter导出excel
FORM export_excel_conv. DATA:t_sflight TYPE TABLE OF sflight. DATA:lo_salv TYPE REF TO cl_salv_table. SELECT * INTO TABLE t_sflight FROM sflight UP TO 10 ROWS. TRY. cl_salv_table=>factory( EXPORTING list_display = abap_false IMPORTING r_salv_table = lo_salv CHANGING t_table = t_sflight[] ). CATCH cx_salv_msg . ENDTRY. "调用显示alv
* lo_salv->display( ).
  DATA: lo_converter TYPE REF TO zcl_excel_converter. "建立zcl_excel_converter类
  CREATE OBJECT lo_converter. TRY . lo_converter->convert( EXPORTING io_alv = lo_salv it_table = t_sflight i_row_int = 2 i_column_int = 2 ). CATCH zcx_excel. ENDTRY. "调用write_file方法导出excel lo_converter->write_file( i_path = 'D:/test.xlsx' ). ENDFORM.                    "EXPORT_TO_EXCEL_CONV

 

    使用zcl_excel_worksheet导出alv到excel。

    一、调用zcl_excel_worksheet对象的方法bind_alv(),将alv和worksheet绑定;

    二、而后zif_excel_writer接口实现对象,将lo_excel转换为xstring,而后再转换为solix_tab类型,最后调用cl_gui_frontend_services的gui_download方法导出excel。

示例2:

"使用worksheet的bind_alv方法
FORM export_excel_bind. DATA:t_sflight TYPE TABLE OF sflight. DATA:lo_salv TYPE REF TO cl_salv_table. SELECT * INTO TABLE t_sflight FROM sflight UP TO 10 ROWS. TRY. cl_salv_table=>factory( EXPORTING list_display = abap_false IMPORTING r_salv_table = lo_salv CHANGING t_table = t_sflight[] ). CATCH cx_salv_msg . ENDTRY. "调用显示alv
* lo_salv->display( ).

  TRY . "将alv绑定到worksheet,
      "只是绑定,导出excel须要调用gui_download方法 lo_worksheet->bind_alv( io_alv = lo_salv it_table = t_sflight i_top = 2 i_left = 1 ). CATCH zcx_excel. ENDTRY. "下载excel操做
  "zcl_excel_writer对象,实例化
  CREATE OBJECT cl_writer TYPE zcl_excel_writer_2007. xdata = cl_writer->write_file( lo_excel ). t_rawdata = cl_bcs_convert=>xstring_to_solix( iv_xstring  = xdata ). "统计字节数 bytecount = xstrlen( xdata ). "下载excel cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = bytecount filename = 'D:/test.xlsx' filetype = 'BIN'
    CHANGING data_tab = t_rawdata ). ENDFORM.

   

  使用zcl_excel_worksheet的bind_alv_ole2方法直接导出。

    一、经过get_globals_from_slvc_fullscr方法获取屏幕的alv对象;

    二、直接调用bind_alv_ole2方法,就能够将alv导出到excel。

示例3:

"经过worksheet的bind_alv_ole2方法,将alv导出
FORM export_excel_bind1. "屏幕alv对象
  DATA:lo_alv TYPE REF TO cl_gui_alv_grid. "excel header
  DATA:gt_listheader TYPE slis_t_listheader. DATA:wa_listheader LIKE LINE OF gt_listheader. "excel保存路径
  DATA:l_path TYPE string VALUE 'C:temp/test.xlsx'. "获取屏幕alv对象
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING e_grid = lo_alv. wa_listheader-typ = 'H'. wa_listheader-info = 'header line'. APPEND wa_listheader TO gt_listheader. wa_listheader-typ = 'S'. wa_listheader-info = 'second line'. APPEND wa_listheader TO gt_listheader. wa_listheader-typ = 'A'. wa_listheader-info = '地址信息'. APPEND wa_listheader TO gt_listheader. "调用lo_worksheet的bind_alv_ole2方法,直接调用下载 lo_worksheet->bind_alv_ole2( EXPORTING
* I_DOCUMENT_URL = SPACE " excel template
* I_XLS = 'X' " create in xls format? i_save_path = l_path io_alv = lo_alv it_listheader = gt_listheader i_top = 2 i_left = 1
* I_COLUMNS_HEADER = 'X'
* I_COLUMNS_AUTOFIT = 'X'
* I_FORMAT_COL_HEADER =
* I_FORMAT_SUBTOTAL =
* I_FORMAT_TOTAL =
    EXCEPTIONS miss_guide = 1 ex_transfer_kkblo_error = 2 fatal_error = 3 inv_data_range = 4 dim_mismatch_vkey = 5 dim_mismatch_sema = 6 error_in_sema = 7 OTHERS = 8 ). IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM.

2.7excel上传

    经过zcl_excel_reader_2007类实例化对象cl_reader,调用load_file方法,获取zcl_excel类对象lo_excel。经过lo_excel获取worksheet,而后经过worksheet获取上传excel单元格内容,将单元格内容保存到内表。

示例:

"读取excel

FORM read_excel. "excel文档类对象

  DATA:lo_excel TYPE REF TO zcl_excel. "excel worksheet类对象

  DATA:lo_worksheet TYPE REF TO zcl_excel_worksheet. "异常类

  DATA:lf_cxexcel TYPE REF TO ZCX_EXCEL. "上传excel

  DATA:cl_reader TYPE REF TO zif_excel_reader. "excel导入内表

  DATA:BEGIN OF t_excel OCCURS 0, str1 TYPE string, str2 TYPE string, str3 TYPE string, str4 TYPE string, END OF t_excel. "读取行列数

  DATA:col_count TYPE I. DATA:row_count TYPE I. DATA:col TYPE I. DATA:row TYPE I. TRY. CREATE OBJECT lo_excel. "cl_reader对象

      CREATE OBJECT cl_reader TYPE zcl_excel_reader_2007. lo_excel = cl_reader->load_file( i_filename = 'D:\test.xlsx' ). lo_worksheet = lo_excel->get_active_worksheet( ). "获取行数,列数
 row_count = lo_worksheet->get_highest_row( ). col_count = lo_worksheet->get_highest_column( ). DO row_count TIMES. row = sy-index. CLEAR t_excel. DO col_count TIMES. col = sy-index. CASE col. WHEN 1. lo_worksheet->get_cell( EXPORTING ip_column = col ip_row = row IMPORTING ep_value = t_excel-str1 ). WHEN 2. lo_worksheet->get_cell( EXPORTING ip_column = col ip_row = row IMPORTING ep_value = t_excel-str2 ). WHEN 3. lo_worksheet->get_cell( EXPORTING ip_column = col ip_row = row IMPORTING ep_value = t_excel-str3 ). WHEN 4. lo_worksheet->get_cell( EXPORTING ip_column = col ip_row = row IMPORTING ep_value = t_excel-str4 ). ENDCASE. ENDDO. APPEND t_excel. ENDDO. LOOP AT t_excel. WRITE:/ t_excel-str1,t_excel-str2,t_excel-str3,t_excel-str4. ENDLOOP. CATCH ZCX_EXCEL INTO lf_cxexcel. "获取错误信息

      DATA:result TYPE string. CALL METHOD lf_cxexcel->IF_MESSAGE~GET_TEXT RECEIVING result = result. MESSAGE result TYPE 'E'. ENDTRY. ENDFORM.

3.设置workbook属性

    设置workbook保护,禁止编辑、新增worksheet。

示例:

"设置workbook级别protection,禁止编辑新建worksheet
FORM set_workbook. lo_excel->zif_excel_book_protection~protected = zif_excel_book_protection=>c_protected. lo_excel->zif_excel_book_protection~lockrevision = zif_excel_book_protection=>c_locked. lo_excel->zif_excel_book_protection~lockstructure = zif_excel_book_protection=>c_locked. lo_excel->zif_excel_book_protection~lockwindows = zif_excel_book_protection=>c_locked. lo_excel->zif_excel_book_protection~workbookpassword = zcl_excel_common=>encrypt_password( 'secret' ). lo_excel->zif_excel_book_protection~revisionspassword = zcl_excel_common=>encrypt_password( 'secret' ). ENDFORM.

4.设置worksheet属性

    一、获取zcl_excel_worksheet类对象;

    经过zcl_excel对象调用add_new_worksheet方法建立类zcl_excel_worksheet实例对象lo_worksheet;

    经过lo_worksheet调用对应方法设置worksheet属性;

示例:

"设置worksheet
FORM set_worksheet. "sheet颜色
  DATA:ls_tabcolor TYPE ZEXCEL_S_TABCOLOR. "打印头和脚
  DATA:ls_header  TYPE zexcel_s_worksheet_head_foot. DATA:ls_footer  TYPE zexcel_s_worksheet_head_foot. TRY . "建立一个新的worksheet lo_worksheet = lo_excel->add_new_worksheet( ). lo_worksheet->set_title( ip_title = 'sheet2' ). lo_worksheet->zif_excel_sheet_properties~selected = zif_excel_sheet_properties=>c_selected.
"设置sheet标签颜色 ls_tabcolor-rgb = zcl_excel_style_color=>c_blue. lo_worksheet->set_tabcolor( iv_tabcolor = ls_tabcolor ).
"设置sheet隐藏 * lo_worksheet->zif_excel_sheet_properties~hidden = zif_excel_sheet_properties=>c_hidden.
"设置隐藏0 lo_worksheet->set_cell( ip_column = 'C' ip_row = 1 ip_value = 'C2隐藏0:' ). lo_worksheet->set_cell( ip_column = 'C' ip_row = 2 ip_value = 0 ). lo_worksheet->zif_excel_sheet_properties~show_zeros = zif_excel_sheet_properties=>c_hidezero. "sheet打印设置,printing settings lo_worksheet->sheet_setup->set_page_margins( ip_header = '1' ip_footer = '1' ip_unit = 'cm' ). lo_worksheet->sheet_setup->black_and_white = 'X'. lo_worksheet->sheet_setup->fit_to_page = 'X'. " you should turn this on to activate fit_to_height and fit_to_width lo_worksheet->sheet_setup->fit_to_height = 0. " used only if ip_fit_to_page = 'X' lo_worksheet->sheet_setup->fit_to_width = 2. " used only if ip_fit_to_page = 'X' lo_worksheet->sheet_setup->orientation = zcl_excel_sheet_setup=>c_orientation_landscape. lo_worksheet->sheet_setup->page_order = zcl_excel_sheet_setup=>c_ord_downthenover. lo_worksheet->sheet_setup->paper_size = zcl_excel_sheet_setup=>c_papersize_a4. lo_worksheet->sheet_setup->scale = 80. " used only if ip_fit_to_page = SPACE "设置打印头和脚 " Header and Footer ls_header-right_value = 'print date &D'. ls_header-right_font-size = 8. ls_header-right_font-name = zcl_excel_style_font=>c_name_arial. ls_footer-left_value = '&Z&F'. "Path / Filename ls_footer-left_font = ls_header-right_font. ls_footer-right_value = 'page &P of &N'. "page x of y ls_footer-right_font = ls_header-right_font. lo_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_header ip_odd_footer = ls_footer ). "设置隐藏列 lo_worksheet->zif_excel_sheet_properties~hide_columns_from = 'M'. "设置行收缩展开,lv_collapsed:true收缩,false展开 lo_worksheet->set_row_outline( iv_row_from = 10 iv_row_to = 16 iv_collapsed = abap_true ). " collapsed "设置sheet保护 DATA:lo_style TYPE REF TO zcl_excel_style. DATA:lv_style_guid TYPE zexcel_cell_style. lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. "设置密码加密 lo_worksheet->zif_excel_sheet_protection~password = zcl_excel_common=>encrypt_password( 'secret' ). lo_worksheet->zif_excel_sheet_protection~sheet = zif_excel_sheet_protection=>c_active. lo_worksheet->zif_excel_sheet_protection~objects = zif_excel_sheet_protection=>c_active. lo_worksheet->zif_excel_sheet_protection~scenarios = zif_excel_sheet_protection=>c_active. lo_style = lo_excel->add_new_style( ). "设置unlocked锁住样式 lo_style->protection->locked = zcl_excel_style_protection=>c_protection_unlocked. lv_style_guid = lo_style->get_guid( ). "设置可编辑 lo_worksheet->set_cell( ip_column = 'E' ip_row = 2 ip_value = 'unlocked' ip_style = lv_style_guid ). "设置单元格尺寸 lo_worksheet->zif_excel_sheet_properties~zoomscale = 150. * lo_worksheet->zif_excel_sheet_properties~zoomscale_normal = 150. * lo_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 150. * lo_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 150. "设置是否显示打印sheet网格线 lo_worksheet->set_show_gridlines( i_show_gridlines = abap_false ). lo_worksheet->set_print_gridlines( i_print_gridlines = abap_false ). CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

   2. 获取设置当前活动worksheet,特别注意操做多个worksheet时,当前哪一个worksheet处于活动状态。

示例:

"设置获取active worksheet
FORM set_active_sheet. "当建立lo_excle->add_new_worksheet(),当前建立worksheet处于active状态
  "get_active_sheet_index()方法,获取活动worksheet的index
  "get_active_worksheet()方法,获取活动worksheet
  "set_active_sheet_index()方法,经过index设置活动worksheet
  "set_active_sheet_index_by_name()方法,
ENDFORM.

5.设置单元格样式

    设置单元格样式:主要是zcl_excel_style类,使用zexcel_cell_style数据类型保存guid。

    一、经过excel对象lo_excel调用add_new_style,建立zcl_excel_style类对象;

    二、经过zcl_excel_style对象属性font,fill,borders,alignment,number_format等,设置显示style;

    三、经过zcl_excel_style对象的get_guid方法获取style对应的guid;

    四、zcl_excel_worksheet类lo_worksheet的set_cell方法输入参数ip_style等于对应获取的guid;

示例:

"设置单元格样式
FORM set_style. "style类
  DATA:lo_style TYPE REF TO zcl_excel_style. "style的guid
  DATA:lv_style_guid TYPE zexcel_cell_style.TRY. "建立一个新的worksheet lo_worksheet = lo_excel->add_new_worksheet( ). lo_worksheet->set_title( ip_title = 'sheet3' ). CATCH ZCX_EXCEL. ENDTRY. 
  "字体设置,类:zcl_excel_style_font
  "建立一个新style lo_style = lo_excel->add_new_style( ). "加粗 lo_style->font->bold   = abap_true. "斜体 lo_style->font->italic = abap_true. "下划线 lo_style->font->underline = abap_true. "下划线mode,单下划线双下划线 lo_style->font->underline_mode = zcl_excel_style_font=>c_underline_double. "字体family,C_FAMILY_XXX lo_style->font->family = zcl_excel_style_font=>c_family_roman. "字体名:c_name_XXX,直接设置字体名:'YouYuan'
* lo_style->font->name = zcl_excel_style_font=>c_name_arial. lo_style->font->name   = 'YouYuan'. "字体主题:C_SCHEME_XXX lo_style->font->scheme = zcl_excel_style_font=>c_scheme_none. "字体颜色,使用CSS颜色值:后面六位,前两位默认FF
* lo_style->font->color-rgb = zcl_excel_style_color=>c_red. lo_style->font->color-rgb = 'FF66FFCC'. "自定义color,设置红绿蓝;create_new_argb方法和create_new_argb_int方法,返回zecel_style_color_argb类型
* zcl_excel_style_color=>create_new_argb( ip_red = 'FF' ip_green = '00' ip_blu = '00' ).
  "颜色对应结构体ZEXCEL_S_STYLE_COLOR
* zexcel_s_style_color-rgb对应:ZEXCEL_STYLE_COLOR_ARGB类型
* zexcel_s_style_color-indexed 对应:ZEXCEL_STYLE_COLOR_INDEXED类型
* zexcel_s_style_color-theme 对应:ZEXCEL_STYLE_COLOR_THEME类型
* zexcel_s_style_color-tint 对应:ZEXCEL_STYLE_COLOR_TINT类型
  "字体大小 lo_style->font->size = 11. "获取style的编码uuid lv_style_guid = lo_style->get_guid( ). TRY . "设置style lo_worksheet->set_cell( ip_column = 'C' ip_row = 1 ip_style = lv_style_guid ip_value = 'style样式字体' ). CATCH ZCX_EXCEL. ENDTRY. 
"fill设置,类:zcl_excel_style_fill "建立一个新style lo_style = lo_excel->add_new_style( ). "填充类型 lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. "前景色 lo_style->fill->fgcolor-rgb = 'FF66FFCC'. "背景色 lo_style->fill->bgcolor-rgb = 'FF000022'. "获取style的编码uuid lv_style_guid = lo_style->get_guid( ). TRY . "设置style lo_worksheet->set_cell( ip_column = 'C' ip_row = 2 ip_style = lv_style_guid ip_value = 'style样式fill' ). CATCH ZCX_EXCEL. ENDTRY.
"设置边框,类:zcl_excel_style_borders
"border类 DATA:lo_border TYPE REF TO zcl_excel_style_border.
"建立一个新style lo_style = lo_excel->add_new_style( ). "建立border对象 CREATE OBJECT lo_border. "设置border样式 lo_border->border_style = zcl_excel_style_border=>c_border_dashdot. lo_border->border_color-rgb = 'FFCC0066'. "设置全部border lo_style->borders->allborders = lo_border. "经过down,left,right,top设置单独边框 * lo_style->borders->down = lo_border. "设置单元格中交叉线 * lo_style->borders->diagonal = lo_border. * lo_style->borders->diagonal_mode = zcl_excel_style_borders=>c_diagonal_both. "获取style的编码uuid lv_style_guid = lo_style->get_guid( ). TRY . "设置style lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_style = lv_style_guid ip_value = 'style样式border' ). CATCH ZCX_EXCEL. ENDTRY. "设置alignment,类:zcl_excel_style_alignment "建立一个新style lo_style = lo_excel->add_new_style( ). "设置水平方向,c_horizontal_xxxx:居中center,靠左left,靠右right,默认general lo_style->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_left. "设置竖直方向,c_vertical_xxxx:顶部top,底部bottom,中间center,排齐justify lo_style->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top. "设置文本旋转 lo_style->alignment->textrotation = 0. "设置缩小适应 lo_style->alignment->shrinktofit = abap_true. "设置缩进字符 lo_style->alignment->indent = 2. "换行 lo_style->alignment->wraptext = abap_true. "获取style的编码uuid lv_style_guid = lo_style->get_guid( ). TRY . "设置style lo_worksheet->set_cell( ip_column = 'C' ip_row = 4 ip_style = lv_style_guid ip_value = 'style样式alignment' ) CATCH ZCX_EXCEL. ENDTRY.
"设置number_format格式,类:zcl_excel_style_number_format "建立一个新style lo_style = lo_excel->add_new_style( ). "日期格式 lo_style->number_format->format_code = zcl_excel_style_number_format=>c_format_date_ddmmyyyy. "获取style的编码uuid lv_style_guid = lo_style->get_guid( ). TRY . "设置style lo_worksheet->set_cell( ip_column = 'C' ip_row = 5 ip_style = lv_style_guid ip_value = sy-datum ). CATCH ZCX_EXCEL. ENDTRY. "建立一个新style lo_style = lo_excel->add_new_style( ). "文本格式 lo_style->number_format->format_code = zcl_excel_style_number_format=>c_format_text. "获取style的编码uuid lv_style_guid = lo_style->get_guid( ). TRY . "设置style lo_worksheet->set_cell( ip_column = 'C' ip_row = 6 ip_style = lv_style_guid ip_value = '01234' ). CATCH ZCX_EXCEL. ENDTRY. "设置保护protection,类:zcl_excel_style_protection "建立一个新style lo_style = lo_excel->add_new_style( ). "是否隐藏?? * lo_style->protection->hidden = zcl_excel_style_protection=>c_protection_hidden. "是否锁住?? lo_style->protection->locked = '1'. "获取style的编码uuid lv_style_guid = lo_style->get_guid( ). TRY . "设置style lo_worksheet->set_cell( ip_column = 'C' ip_row = 7 ip_style = lv_style_guid ip_value = 'style样式protection' ). CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

    设置单元格对应数据ABAP类型。

示例:

"设置单元格对应ABAP数据类型
FORM set_typedesc. TRY. "建立一个新的worksheet
      lo_worksheet = lo_excel->add_new_worksheet( ). lo_worksheet->set_title( ip_title = 'sheet6' ). "设置type desc
      "cl_abap_typedescr=>typekind_string,
      "cl_abap_typedescr=>typekind_packed,
      "cl_abap_typedescr=>typekind_num,
      "cl_abap_typedescr=>typekind_date,
      lo_worksheet->set_cell( ip_column = 'C' ip_row = 1 ip_abap_type = cl_abap_typedescr=>typekind_string ip_value = 'string' ). CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

6.显示内表到excel

    经过worksheet的bind_table方法将一个内表显示到sheet中

示例:

"展现一个内表到excel
FORM show_itab. "内表定义
  DATA:t_sflight LIKE TABLE OF sflight. SELECT * INTO CORRESPONDING FIELDS OF TABLE t_sflight FROM sflight WHERE CARRID = 'AA'. "excel内表设置
  DATA: ls_table_settings TYPE zexcel_s_table_settings. "excel内表显示栏位,样式
  DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog. "指针
  FIELD-SYMBOLS:<fs_catalog> TYPE zexcel_s_fieldcatalog. TRY . "建立一个新的worksheet lo_worksheet = lo_excel->add_new_worksheet( ). "设置sheet标题 lo_worksheet->set_title( ip_title = 'itab' ). "设置内表样式 ls_table_settings-table_name = 'itab'. ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium2. "设置内表起始列和行 ls_table_settings-top_left_column = 'B'. ls_table_settings-top_left_row = 2. * ls_table_settings-bottom_right_column = 'F'.
* ls_table_settings-bottom_right_row = 8.
      "行条纹 ls_table_settings-show_row_stripes  = abap_false. "列条纹 ls_table_settings-show_column_stripes  = abap_true. "无过滤器 ls_table_settings-nofilters = abap_true. "iconset
      DATA: ls_iconset TYPE zexcel_conditional_iconset. "条件格式
      DATA: lo_style_conditional   TYPE REF TO zcl_excel_style_conditional. "设置显示图标类型c_iconset_XXXX,不一样图标 ls_iconset-iconset = zcl_excel_style_conditional=>c_iconset_5rating. "iconset_数字,数字是几设置几个cfvo,显示不一样图标区间 ls_iconset-cfvo1_type  = zcl_excel_style_conditional=>c_cfvo_type_percent. ls_iconset-cfvo1_value = '0'. ls_iconset-cfvo2_type  = zcl_excel_style_conditional=>c_cfvo_type_percent. ls_iconset-cfvo2_value = '20'. ls_iconset-cfvo3_type  = zcl_excel_style_conditional=>c_cfvo_type_percent. ls_iconset-cfvo3_value = '30'. ls_iconset-cfvo4_type  = zcl_excel_style_conditional=>c_cfvo_type_percent. ls_iconset-cfvo4_value = '40'. ls_iconset-cfvo5_type  = zcl_excel_style_conditional=>c_cfvo_type_percent. ls_iconset-cfvo5_value = '50'. "条件设置 lo_style_conditional = lo_worksheet->add_new_conditional_style( ). "规则 lo_style_conditional->rule  = zcl_excel_style_conditional=>c_rule_iconset. "优先级 lo_style_conditional->priority = 1. lo_style_conditional->mode_iconset  = ls_iconset. "是否同时显示单元格值 ls_iconset-showvalue = zcl_excel_style_conditional=>c_showvalue_true. "获取内表字段 lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = t_sflight ). "设置field catalog
      "zexcel_s_fieldcatalog字段解析
      "position:字段显示位置
      "dynpfld:字段是否显示,true显示,false隐藏
      "abap_type:字段对应ABAP类型
      "cond_style:能够添加zcl_excel_style_conditional,图标显示
      "totals_function:该列添加统计行,统计类型,
      "TOTALS_FUNCTION_AVERAGE:平均值
      "TOTALS_FUNCTION_COUNT:统计记录数
      "TOTALS_FUNCTION_MAX:最大值
      "TOTALS_FUNCTION_MIN:最小值
      "TOTALS_FUNCTION_SUM:合计
      LOOP AT lt_field_catalog ASSIGNING <fs_catalog>. CASE <fs_catalog>-fieldname. WHEN 'CARRID'. <fs_catalog>-position = 1. <fs_catalog>-dynpfld = abap_true. WHEN 'CONNID'. <fs_catalog>-position = 2. <fs_catalog>-dynpfld = abap_true. <fs_catalog>-abap_type = cl_abap_typedescr=>typekind_int. WHEN 'FLDATE'. <fs_catalog>-position = 3. <fs_catalog>-dynpfld = abap_true. <fs_catalog>-totals_function = zcl_excel_table=>totals_function_count. WHEN 'PRICE'. <fs_catalog>-position = 4. <fs_catalog>-dynpfld = abap_true. <fs_catalog>-cond_style = lo_style_conditional. <fs_catalog>-totals_function = zcl_excel_table=>totals_function_sum. WHEN OTHERS. <fs_catalog>-dynpfld = abap_false. ENDCASE. ENDLOOP. "设置内表和worksheet绑定 lo_worksheet->bind_table( ip_table = t_sflight is_table_settings = ls_table_settings it_field_catalog = lt_field_catalog ). "设置固定行 lo_worksheet->freeze_panes( ip_num_rows = 3 ). "设置活动的lo_worksheet,从1开始,
      "使用set_active_sheet_index_by_name方法,经过sheet名设置active sheet lo_excel->set_active_sheet_index( 1 ). CATCH ZCX_EXCEL INTO lf_cxexcel. "获取错误信息
      DATA:result TYPE String. CALL METHOD lf_cxexcel->IF_MESSAGE~GET_TEXT RECEIVING result = result. MESSAGE result TYPE 'E'. ENDTRY. ENDFORM.

7.condition图标显示

  经过zcl_excel_style_conditional类,显示不一样图标。

示例:

"图标显示
FORM conditional_format. "条件格式
  DATA: lo_style_conditional   TYPE REF TO zcl_excel_style_conditional. TRY. "建立一个新的worksheet lo_worksheet = lo_excel->add_new_worksheet( ). lo_worksheet->set_title( ip_title = 'sheet4' ). 
"iconset DATA: ls_iconset TYPE zexcel_conditional_iconset. "设置显示图标类型c_iconset_XXXX,不一样图标 ls_iconset-iconset = zcl_excel_style_conditional=>c_iconset_3trafficlights2. "iconset_数字,数字是几设置几个cfvo,显示不一样图标区间 ls_iconset-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. ls_iconset-cfvo1_value = '0'. ls_iconset-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. ls_iconset-cfvo2_value = '33'. ls_iconset-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. ls_iconset-cfvo3_value = '66'. "是否同时显示单元格值 ls_iconset-showvalue = zcl_excel_style_conditional=>c_showvalue_true. "条件设置 lo_style_conditional = lo_worksheet->add_new_conditional_style( ). "规则 lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. "优先级 lo_style_conditional->priority = 1. lo_style_conditional->mode_iconset = ls_iconset. "设置范围range lo_style_conditional->set_range( ip_start_column = 'C' ip_start_row = 4 ip_stop_column = 'C' ip_stop_row = 8 ). lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 100 ). lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 1000 ). lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 150 ). lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 10 ). lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 500 ).
"databar DATA:ls_databar TYPE zexcel_conditional_databar. ls_databar-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_min. ls_databar-cfvo1_value = '0'. ls_databar-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_max. ls_databar-cfvo2_value = '0'. ls_databar-colorrgb = 'FF638EC6'. "条件设置 lo_style_conditional = lo_worksheet->add_new_conditional_style( ). "规则 lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_databar. "优先级 lo_style_conditional->priority = 1. lo_style_conditional->mode_databar = ls_databar. "设置范围range lo_style_conditional->set_range( ip_start_column = 'D' ip_start_row = 4 ip_stop_column = 'D' ip_stop_row = 8 ). lo_worksheet->set_cell( ip_row = 4 ip_column = 'D' ip_value = 100 ). lo_worksheet->set_cell( ip_row = 5 ip_column = 'D' ip_value = 200 ). lo_worksheet->set_cell( ip_row = 6 ip_column = 'D' ip_value = 300 ). lo_worksheet->set_cell( ip_row = 7 ip_column = 'D' ip_value = 400 ). lo_worksheet->set_cell( ip_row = 8 ip_column = 'D' ip_value = 500 ). "colorscale DATA:ls_colorscale TYPE zexcel_conditional_colorscale. ls_colorscale-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_min. ls_colorscale-cfvo1_value = 0. ls_colorscale-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percentile. ls_colorscale-cfvo2_value = '50'. ls_colorscale-colorrgb1 = 'FFF8696B'. ls_colorscale-colorrgb2 = 'FF63BE7B'. "条件设置 lo_style_conditional = lo_worksheet->add_new_conditional_style( ). "规则 lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_colorscale. "优先级 lo_style_conditional->priority = 1. lo_style_conditional->mode_colorscale = ls_colorscale. "设置范围range lo_style_conditional->set_range( ip_start_column = 'E' ip_start_row = 4 ip_stop_column = 'E' ip_stop_row = 8 ). lo_worksheet->set_cell( ip_row = 4 ip_column = 'E' ip_value = 10 ). lo_worksheet->set_cell( ip_row = 5 ip_column = 'E' ip_value = 20 ). lo_worksheet->set_cell( ip_row = 6 ip_column = 'E' ip_value = 30 ). lo_worksheet->set_cell( ip_row = 7 ip_column = 'E' ip_value = 40 ). lo_worksheet->set_cell( ip_row = 8 ip_column = 'E' ip_value = 50 ). "cellis "根据条件,设置单元格样式 DATA:lo_style TYPE REF TO zcl_excel_style. DATA:lv_style_guid TYPE zexcel_cell_style. DATA:ls_cellis TYPE zexcel_conditional_cellis. lo_style = lo_excel->add_new_style( ). lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. lo_style->fill->bgcolor-rgb = 'FF00CCFF'. lv_style_guid = lo_style->get_guid( ).
    "条件设置 lo_style_conditional
= lo_worksheet->add_new_conditional_style( ). lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. ls_cellis-formula = '"hello"'. ls_cellis-operator = zcl_excel_style_conditional=>c_operator_equal. ls_cellis-cell_style = lv_style_guid. lo_style_conditional->mode_cellis = ls_cellis. lo_style_conditional->priority = 1. lo_style_conditional->set_range( ip_start_column = 'G' ip_start_row = 2 ip_stop_column = 'G' ip_stop_row = 2 ). lo_worksheet->set_cell( ip_row = 1 ip_column = 'G' ip_value = 'G2输入hello显示样式:' ). CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

8.设置单元格公式

    设置单元格公式:经过set_cell方法的ip_formula参数设置;

示例:

"formula,公式
FORM set_formula. TRY . lo_excel->set_active_sheet_index_by_name( 'sheet4' ). "获取worksheet,经过sheet名 lo_worksheet = lo_excel->get_worksheet_by_name( 'sheet4' ). lo_worksheet->set_cell( ip_row = 9 ip_column = 'C' ip_value = '求和:' ). lo_worksheet->set_cell( ip_row = 10 ip_column = 'C' ip_formula = 'SUM(C4:C5)' ). CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

批量设置多个单元格公式:

    使用zcl_excel_commom的shift_formula方法批量获取动态公式。

示例:

"经过循环获取动态公式
      DO 2 TIMES. "获取转换的公式 lv_formula = zcl_excel_common=>shift_formula( iv_reference_formula = 'SUM(C4:C5)' iv_shift_cols = 0 iv_shift_rows = sy-index ). lv_row = 10 + sy-index.  " Absolute row = sy-index rows below reference cell lo_worksheet->set_cell( ip_row = lv_row ip_column = 'C' ip_formula = lv_formula ). ENDDO.

9.定义range区域

    定义一个range区域,至关于Excel选择区域,进行批量单元格设置。

示例:

"range获取
FORM set_range. "range
  DATA:lo_range TYPE REF TO zcl_excel_range. "sheet名
  DATA: lv_title TYPE zexcel_sheet_title VALUE 'sheet4'. lo_range = lo_excel->add_new_range( ). lo_range->name = 'range'. "A4A5区域 lo_range->set_value( ip_sheet_name    = lv_title ip_start_column = 'A' ip_start_row = 4 ip_stop_column = 'A' ip_stop_row = 5 ). ENDFORM.

10.通用zcl_excel_common类

    通用方法类zcl_excel_common,提供一些通用方法使用。

示例:

"ZCL_EXCEL_COMMON类
FORM common_excel. "ZCL_EXCEL_COMMON类提供一些通用方法
  "CONVERT_COLUMN2ALPHA:将列号转换对应字母
  "DATE_TO_EXCEL_STRING:将日期转换为string类型对应数字字符串
  "ENCRYPT_PASSWORD:加密密码字符串
  "EXCEL_STRING_TO_DATE:将日期数字字符串转换为日期
  "SHIFT_FORMULA:移动应用单元格公式
ENDFORM.

11.设置单元格验证

  1.经过zcl_excel_worksheet类对象lo_worksheet的add_new_worksheet方法获取zcl_excel_data_validation类;  

  2.经过zcl_excel_data_validation类设置验证规则;

示例:

"单元格验证
FORM set_validation. "range
  DATA:lo_range TYPE REF TO zcl_excel_range. "data validation验证规则
  DATA:lo_data_validation TYPE REF TO zcl_excel_data_validation. TRY. "建立一个新的worksheet lo_worksheet = lo_excel->add_new_worksheet( ). lo_worksheet->set_title( ip_title = 'data validation' ). "设置下拉选择值 lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = '苹果' ). lo_worksheet->set_cell( ip_row = 2 ip_column = 'A' ip_value = '梨子' ). lo_worksheet->set_cell( ip_row = 3 ip_column = 'A' ip_value = '香蕉' ). "建立新range lo_range = lo_worksheet->add_new_range( ). lo_range->name = 'fruit'. "ip_sheet_name设置range数据所在sheet,设置range范围 lo_range->set_value( ip_sheet_name = 'data validation' ip_start_column = 'A' ip_start_row = '1' ip_stop_column = 'A' ip_stop_row = '3' ). "建立验证规则 lo_data_validation = lo_worksheet->add_new_data_validation( ). "验证类型:下拉选择框 lo_data_validation->type = zcl_excel_data_validation=>c_type_list. lo_data_validation->formula1 = 'fruit'. "规则所在单元格 lo_data_validation->cell_row = 4. lo_data_validation->cell_column = 'A'. lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 'Select a value' ). "建立验证规则 lo_data_validation = lo_worksheet->add_new_data_validation( ). "验证类型:文本长度 lo_data_validation->type = zcl_excel_data_validation=>c_type_textlength. "操做符:小于等于 lo_data_validation->operator = zcl_excel_data_validation=>c_operator_lessthanorequal. "公式 lo_data_validation->formula1 = 10. "规则所在单元格 lo_data_validation->cell_row = 2. lo_data_validation->cell_column = 'B'. "规则区域
* lo_data_validation->cell_row_to = 3.
* lo_data_validation->cell_column = 'D'. lo_worksheet->set_cell( ip_row = 1 ip_column = 'B' ip_value = 'text长度小于10:' ). "建立验证规则 lo_data_validation = lo_worksheet->add_new_data_validation( ). "验证类型: lo_data_validation->type = zcl_excel_data_validation=>c_type_whole. "操做符:between lo_data_validation->operator    = zcl_excel_data_validation=>c_operator_between. "范围 lo_data_validation->formula1    = 1. lo_data_validation->formula2    = 10. "选择单元格,弹出提示信息 lo_data_validation->prompttitle = 'Range'. lo_data_validation->prompt      = 'Enter a value between 1 and 10'. "错误弹窗,显示错误信息 lo_data_validation->errortitle  = 'Error'. lo_data_validation->error       = 'You have entered a wrong value. Please use only numbers between 1 and 10.'. "规则生效单元格 lo_data_validation->cell_row    = 2. lo_data_validation->cell_column = 'C'. lo_worksheet->set_cell( ip_row = 1 ip_column = 'C' ip_value = '数字在1-10:' ). CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

12.设置单元格合并

    使用zcl_excel_worksheet类对象set_merge方法,合并单元格操做。

示例:

"单元格合并
FORM set_merge. TRY . lo_worksheet->set_cell( ip_row = 1 ip_column = 'F' ip_value = '单元格合并' ). "设置单元格合并 lo_worksheet->set_merge( ip_column_start = 'F' ip_column_end = 'H' ip_row = 1 ip_row_to = 2 ). CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

13.行列选择

    使用zcl_excel_worksheet_columndime类对象保存列信息,zcl_excel_worksheet_rowdimensi 类对象保存行信息。

    经过zcl_excel_worksheet类对象的get_column_dimension方法获取列对象;

    经过zcl_excel_worksheet类对象的get_row_dimension方法行对象;

    调用行列对象方法设置行列参数。

示例:

"行列选择
FORM select_area. "列选择对象
  DATA:column_dimension TYPE REF TO zcl_excel_worksheet_columndime. "行选择对象
  DATA:row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi. TRY . "列选择 column_dimension = lo_worksheet->get_column_dimension( ip_column = 'A' ). "设置列属性
      "设置列宽 column_dimension->set_width( ip_width = 6 ). "设置自动列宽 column_dimension->set_auto_size( ip_auto_size = abap_true ). "设置是否可见 column_dimension->set_visible( ip_visible = abap_true ). "设置列样式
      "style类
      DATA:lo_style TYPE REF TO zcl_excel_style. "style的guid
      DATA:lv_style_guid TYPE zexcel_cell_style. "建立一个新style lo_style = lo_excel->add_new_style( ). "文本格式 lo_style->number_format->format_code =  zcl_excel_style_number_format=>c_format_text. "获取style的编码uuid lv_style_guid = lo_style->get_guid( ). column_dimension->set_column_style_by_guid( ip_style_guid = lv_style_guid ). "设置outline level,出现列收缩展开栏 column_dimension->set_outline_level( ip_outline_level = 0 ). "行选择 row_dimension = lo_worksheet->get_row_dimension( ip_row = 1 ). "设置行高 row_dimension->set_row_height( ip_row_height = 32 ). CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

14.获取worksheet的行列数

    经过zcl_excel_worksheet类对象的ge_hightest_row方法获取当前worksheet中行数;

    经过zcl_excel_worksheet类对象的ge_hightest_column方法获取当前worksheet中列数;

示例:

"获取excel的列数和行数
FORM get_rc. "行数
  DATA:lv_rows TYPE I. "列数
  DATA:lv_columns TYPE I. "列数对应字母
  DATA:col_alpha TYPE zexcel_cell_column_alpha. TRY . "获取行列数 lv_rows = lo_worksheet->get_highest_row( ). lv_columns = lo_worksheet->get_highest_column( ). "将列数转换成对应列字母 col_alpha = zcl_excel_common=>convert_column2alpha( ip_column = 2 ). CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

15.excel显示图片

    经过zcl_excel_drawing类对象实现excel中绘制图片。

示例:

"显示图片
FORM set_drawing. "绘制图片对象
  DATA:lo_drawing TYPE REF TO zcl_excel_drawing. TRY . "建立一个新的worksheet lo_worksheet = lo_excel->add_new_worksheet( ). lo_worksheet->set_title( ip_title = 'drawing' ). "显示本地路径图片
      DATA:t_solix TYPE solix_tab. DATA:lv_len TYPE I. DATA:lv_xstring TYPE xstring. CALL METHOD cl_gui_frontend_services=>gui_upload EXPORTING filename = 'D:\图片\back2.jpg' filetype = 'BIN'
        IMPORTING filelength = lv_len CHANGING data_tab = t_solix. IF sy-subrc <> 0 . MESSAGE '读取失败!' TYPE 'E'. ENDIF. CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
        EXPORTING input_length = lv_len IMPORTING buffer = lv_xstring TABLES binary_tab = t_solix EXCEPTIONS failed = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. "建立zcl_excel_drawing对象 lo_drawing = lo_excel->add_new_drawing( ). lo_drawing->set_position( ip_from_row = 3 ip_from_col = 'B' ). lo_drawing->set_media( ip_media = lv_xstring ip_media_type = zcl_excel_drawing=>c_media_type_bmp ip_width = 83 ip_height = 160 ). "worksheet添加图片 lo_worksheet->add_drawing( lo_drawing ). "加载tcode:SMW0图片
      DATA:ls_key TYPE wwwdatatab. ls_key-relid = 'MI'. "SMW0,经过object id能够查找到图片 ls_key-objid = 'SAPLOGO.GIF'. lo_drawing = lo_excel->add_new_drawing( ). lo_drawing->set_position( ip_from_row = 16 ip_from_col = 'B' ). lo_drawing->set_media_www( ip_key = ls_key ip_width = 166 ip_height = 75 ). "worksheet添加图片 lo_worksheet->add_drawing( lo_drawing ). "Mime repository (by default Question mark in standard Web Dynpro WDT_QUIZ
      "使用lo_worksheet->set_media_mime方法
    CATCH ZCX_EXCEL. ENDTRY. ENDFORM.

16.设置过滤器filter

    经过zcl_excel_autofilter类对象实现过滤器filter。

示例:

"设置filter
FORM set_filter. DATA:t_sflight TYPE TABLE OF sflight. SELECT * FROM sflight INTO TABLE t_sflight UP TO 10 ROWS. "将alv或者内表绑定到excel,converter类
  DATA:lo_converter TYPE REF TO zcl_excel_converter. "自动过滤类
  DATA:lo_autofilter TYPE REF TO zcl_excel_autofilter. "过滤器范围
  DATA:ls_area TYPE zexcel_s_autofilter_area. "列单元格值
  DATA:lv_cell_value TYPE zexcel_cell_value. TRY . "建立一个新的worksheet lo_worksheet = lo_excel->add_new_worksheet( ). lo_worksheet->set_title( ip_title = 'filter' ). CREATE OBJECT lo_converter. lo_converter->convert( EXPORTING it_table = t_sflight i_row_int = 1 i_column_int = 1 io_worksheet = lo_worksheet CHANGING co_excel = lo_excel ). "当前worksheet,建立新的filter对象 lo_autofilter = lo_excel->add_new_autofilter( io_sheet = lo_worksheet ) . ls_area-row_start = 1. ls_area-col_start = 1. ls_area-row_end = lo_worksheet->get_highest_row( ). ls_area-col_end = lo_worksheet->get_highest_column( ). lo_autofilter->set_filter_area( ls_area ). "设置第三列filter value
* lo_worksheet->get_cell( EXPORTING
* ip_column = 'C'
* ip_row = 2
* IMPORTING
* ep_value = lv_cell_value ).
    "设置列筛选值
* lo_autofilter->set_value( i_column = 3 i_value = lv_cell_value ).
    CATCH ZCX_EXCEL. ENDTRY. ENDFORM.
相关文章
相关标签/搜索