OLE导出EXCEL 问题处理

需求:

2、资产负债表、利润表导出优化,由于项目公司门店较多,需要增加批量导出功能。按纳税主体维度导出execl文件,输入了几个纳税主体,就生成几个execl文件。

实现:

用程序ZFIR0014XLS  submit  ZFIR0014 ,每次传入一个纳税主体,实现一次导出多个EXCEL

  SORT lt_nszt BY znsztbm.
  DELETE ADJACENT DUPLICATES FROM lt_nszt COMPARING znsztbm.
  LOOP AT lt_nszt.
    CLEAR:rt_nszt[].
    rt_nszt = VALUE #( ( sign = 'I' option = 'EQ'   low = lt_nszt-znsztbm high = '' ) ).
    SUBMIT zfir0014 WITH p_bukrs IN p_bukrs
                    WITH p_tpaye IN rt_nszt
                    WITH p_gjahr IN p_gjahr
                    WITH p_monat = p_monat AND RETURN.
*                    WITH p_rg1   = ''
*                    WITH p_rg2   = 'X'
*                    WITH repfile = repfile
  ENDLOOP.

但是测试过程遇到好几个EXCEL 的奇怪错误,Excel 的错误不熟悉,不知道怎么找原因,需要研究

问题:1. 双击打开EXCEL文件 ,闪一下就没反应了,文档没有打开

2.打开 EXCEL文件,第一次能看到数据, 关闭,再一次代开,EXCEL文件中sheet2的 数据没有了

3.报错EXCEL 被我自己的用户打开了,已经锁定

EXCEL 导出的函数源码  

 函数:Z_SAVE_INITABLE_TO_EXCEL

FUNCTION Z_SAVE_INITABLE_TO_EXCEL.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IV_TYPES) TYPE  CHAR1
*"     VALUE(IV_VISIBLE) TYPE  I DEFAULT 1
*"     REFERENCE(IV_FILENAME)
*"  TABLES
*"      IT_TABLE STRUCTURE  ZFAGL_EXCEL
*"  EXCEPTIONS
*"      NO_RECORD
*"----------------------------------------------------------------------


  INCLUDE  ole2incl.
  DATA: excel TYPE  ole2_object.   "Excel Object
  DATA: books TYPE ole2_object.    "List of workbooks
  DATA: range TYPE ole2_object.
  DATA: book TYPE ole2_object.     "workbook
  DATA: worksheets TYPE ole2_object.     "workbook
  DATA: sheets TYPE ole2_object.     "workbook
  DATA: cells TYPE ole2_object.     "workbook
  DATA: s1(10) TYPE c,
        s2(10) TYPE c,
        msg(100) TYPE c.
  DEFINE insert_excel_row.
    call method of
    sheets
    'ROWS' = range
    exporting
      #1     = &1.
    call method of range 'INSERT'
    .
  END-OF-DEFINITION.
  DEFINE write_excel_cells.
    call method of
    excel
    'Cells' = cells
    exporting
      #1      = &1
      #2      = &2.
    set property of cells 'VALUE' = &3.
  END-OF-DEFINITION.


  s1 = lines( it_table[] ) .
  IF s1 = 0.
    MESSAGE '没有满足条件的记录!' TYPE 'I' .
    RAISE no_record.
  ENDIF.

  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
  EXPORTING
    percentage = 0
    text       = '正在处理Excel文件......'
  EXCEPTIONS
    OTHERS     = 1.
*  ********打开EXCEL表************
  CREATE OBJECT excel 'Excel.Application'.
  SET PROPERTY OF excel 'VISIBLE' = 0.
  CALL METHOD OF
  excel
  'WORKBOOKS' = books.
  CALL METHOD OF
  books
  'OPEN' = book
  EXPORTING
    #1     = iv_filename.  "本地文件地址和文件名
*  选择Sheets 2
  CALL METHOD OF
  excel
  'Sheets' = sheets
  EXPORTING
    #1       = 2.
  CALL METHOD OF
  sheets
  'Select'.
*  激活选择的sheets
*  CALL METHOD OF
*      SHEETS
*      'ACTIVATE'.
*  把内表数据写入到 sheet2 中。

  SORT it_table BY zzcode DESCENDING.
  LOOP AT it_table.
    s2 = sy-tabix.
    CONDENSE: s1,s2.
    CONCATENATE  '正在写入EXCEL:' s2 '/' s1  '......' INTO msg.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = 2
      text       = msg
    EXCEPTIONS
      OTHERS     = 1.
    insert_excel_row sy-tabix.
    write_excel_cells:sy-tabix 1 it_table-zzcode,
    sy-tabix 2 it_table-zzitemcn,
    sy-tabix 3 it_table-ncbtr,
    sy-tabix 4 it_table-qmbtr,
    sy-tabix 5 it_table-butxt,
    sy-tabix 6 it_table-monat,
    sy-tabix 7 it_table-hsldt,
    sy-tabix 8 it_table-hsldt_total,
    sy-tabix 9 it_table-hsldt_before,
    sy-tabix 10 it_table-hsldt_year_total,
    sy-tabix 11 it_table-hsldt_before_year,
    sy-tabix 12 it_table-attrx1,
    sy-tabix 13 it_table-attrx2,
    sy-tabix 14 it_table-attrx3,
    sy-tabix 15 it_table-attr1,
    sy-tabix 16 it_table-attr2,
    sy-tabix 17 it_table-attr3,
    sy-tabix 18 it_table-attr4,
    sy-tabix 19 it_table-attr5,
    sy-tabix 20 it_table-attr6,
    sy-tabix 21 it_table-attr7,
    sy-tabix 22 it_table-attr8,
    sy-tabix 23 it_table-attr9,
    sy-tabix 24 it_table-attr10,
    sy-tabix 25 it_table-attr11,
    sy-tabix 26 it_table-attr12 .
  ENDLOOP.

*  选择Sheets 1
  SET PROPERTY OF excel 'VISIBLE' = iv_visible.
  CALL METHOD OF
  excel
  'Sheets' = sheets
  EXPORTING
    #1       = 1.
  CALL METHOD OF
  sheets
  'Select'.
*  激活选择的sheets
  CALL METHOD OF
  sheets
  'ACTIVATE'.
  SET PROPERTY OF book 'SAVED' = 0.
*  SET PROPERTY OF excel 'Visible' = 1.

  FREE OBJECT book.



ENDFUNCTION.
View Code

猜你喜欢

转载自www.cnblogs.com/rainysblog/p/11289651.html