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进程没有关闭, 进程被占用,所以打开任何一个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() TYPE c,
s2() TYPE c,
msg() TYPE c.
DEFINE insert_excel_row.
call method of
sheets
'ROWS' = range
exporting
# = &.
call method of range 'INSERT'
.
END-OF-DEFINITION.
DEFINE write_excel_cells.
call method of
excel
'Cells' = cells
exporting
# = &
# = &.
set property of cells 'VALUE' = &.
END-OF-DEFINITION. s1 = lines( it_table[] ) .
IF s1 = .
MESSAGE '没有满足条件的记录!' TYPE 'I' .
RAISE no_record.
ENDIF. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage =
text = '正在处理Excel文件......'
EXCEPTIONS
OTHERS = .
* ********打开EXCEL表************
CREATE OBJECT excel 'Excel.Application'.
SET PROPERTY OF excel 'VISIBLE' = .
CALL METHOD OF
excel
'WORKBOOKS' = books.
CALL METHOD OF
books
'OPEN' = book
EXPORTING
# = iv_filename. "本地文件地址和文件名
* 选择Sheets 2
CALL METHOD OF
excel
'Sheets' = sheets
EXPORTING
# = .
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 =
text = msg
EXCEPTIONS
OTHERS = .
insert_excel_row sy-tabix.
write_excel_cells:sy-tabix it_table-zzcode,
sy-tabix it_table-zzitemcn,
sy-tabix it_table-ncbtr,
sy-tabix it_table-qmbtr,
sy-tabix it_table-butxt,
sy-tabix it_table-monat,
sy-tabix it_table-hsldt,
sy-tabix it_table-hsldt_total,
sy-tabix it_table-hsldt_before,
sy-tabix it_table-hsldt_year_total,
sy-tabix it_table-hsldt_before_year,
sy-tabix it_table-attrx1,
sy-tabix it_table-attrx2,
sy-tabix it_table-attrx3,
sy-tabix it_table-attr1,
sy-tabix it_table-attr2,
sy-tabix it_table-attr3,
sy-tabix it_table-attr4,
sy-tabix it_table-attr5,
sy-tabix it_table-attr6,
sy-tabix it_table-attr7,
sy-tabix it_table-attr8,
sy-tabix it_table-attr9,
sy-tabix it_table-attr10,
sy-tabix it_table-attr11,
sy-tabix it_table-attr12 .
ENDLOOP. * 选择Sheets 1
SET PROPERTY OF excel 'VISIBLE' = iv_visible.
CALL METHOD OF
excel
'Sheets' = sheets
EXPORTING
# = .
CALL METHOD OF
sheets
'Select'.
* 激活选择的sheets
CALL METHOD OF
sheets
'ACTIVATE'.
SET PROPERTY OF book 'SAVED' = .
* SET PROPERTY OF excel 'Visible' = 1. FREE OBJECT book. ENDFUNCTION.
修改后代码
INCLUDE ole2incl.
DATA: excel TYPE ole2_object. "Excel Object
DATA: books TYPE ole2_object. "List of workbooks
DATA: sheets TYPE ole2_object. "workbook
DATA: book TYPE ole2_object. "workbook
DATA: cells TYPE ole2_object. "workbook DATA: s1() TYPE c,
s2() TYPE c,
msg() TYPE c. DEFINE write_excel_cells.
CALL METHOD OF
excel
'Cells' = cells
EXPORTING
# = &
# = &.
SET PROPERTY OF cells 'VALUE' = &.
END-OF-DEFINITION. s1 = lines( it_table[] ) .
IF lines( it_table[] ) = .
MESSAGE '没有满足条件的记录!' TYPE 'I' .
RAISE no_record.
ENDIF. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage =
text = '正在处理Excel文件......'
EXCEPTIONS
OTHERS = . CREATE OBJECT excel 'Excel.Application'.
SET PROPERTY OF excel 'VISIBLE' = . CALL METHOD OF excel 'WORKBOOKS' = books. CALL METHOD OF books 'OPEN' = book
EXPORTING
# = iv_filename. "本地文件地址和文件名 CALL METHOD OF excel 'Sheets' = sheets
EXPORTING
# = . * SET PROPERTY OF sheets 'NAME' = '纳税主体'. CALL METHOD OF sheets 'Select'. SORT it_table BY zzcode .
LOOP AT it_table .
s2 = sy-tabix.
CONDENSE: s1,s2.
msg = '正在写入EXCEL:' && s2 && '/' && s1 && '......'.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
percentage =
text = msg
EXCEPTIONS
OTHERS = . write_excel_cells:
s2 it_table-zzcode,
s2 it_table-zzitemcn,
s2 it_table-ncbtr,
s2 it_table-qmbtr,
s2 it_table-butxt,
s2 it_table-monat,
s2 it_table-hsldt,
s2 it_table-hsldt_total,
s2 it_table-hsldt_before,
s2 it_table-hsldt_year_total,
s2 it_table-hsldt_before_year,
s2 it_table-attrx1,
s2 it_table-attrx2,
s2 it_table-attrx3,
s2 it_table-attr1,
s2 it_table-attr2,
s2 it_table-attr3,
s2 it_table-attr4,
s2 it_table-attr5,
s2 it_table-attr6,
s2 it_table-attr7,
s2 it_table-attr8,
s2 it_table-attr9,
s2 it_table-attr10,
s2 it_table-attr11,
s2 it_table-attr12 . ENDLOOP. CALL METHOD OF book 'Save'.
CALL METHOD OF book 'close'.
CALL METHOD OF excel 'quit'.
OLE导出EXCEL 问题处理的更多相关文章
- PHP导入导出excel表格图片(转)
写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用过,csv的就更不用谈了.呵呵.(COM方式不讲了,这种可读的太多了,我也写过利用wp ...
- C#变成数据导入Excel和导出Excel
excel 基础 •整个excel 表格叫工作表:workbook:工作表包含的叫页:sheet:行:row:单元格:cell. •excel 中的电话号码问题,看起来像数字的字符串以半角单引号开头就 ...
- Java使用POI实现数据导出excel报表
Java使用POI实现数据导出excel报表 在上篇文章中,我们简单介绍了java读取word,excel和pdf文档内容 ,但在实际开发中,我们用到最多的是把数据库中数据导出excel报表形式.不仅 ...
- PHP导入导出Excel方法
看到这篇文章的时候,很是惊讶原作者的耐心,虽然我们在平时用的也 有一些,但没有作者列出来的全,写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xm ...
- 懒人小工具:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法
之前写了篇文章,懒人小工具:[自动生成Model,Insert,Select,Delete以及导出Excel的方法](http://www.jianshu.com/p/d5b11589174a),但是 ...
- 2018年,请不要再使用OLE生成EXCEL文件
输出EXCEL文件是ABAP开发工作中的常见需求,为了学习相关技术,我翻译过一篇文章:使用OLE2对象创建EXCEL文件,并且一度乐在其中. 最近几个月,经过与若干EXCEL打印程序的艰苦斗争,以及对 ...
- 懒人小工具:T4生成实体类Model,Insert,Select,Delete以及导出Excel的方法
由于最近公司在用webform开发ERP,用到大量重复机械的代码,之前写了篇文章,懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法,但是有人觉得这种方法 ...
- HSSF与XSSF导出excel文档
Apache POI Apache POI 是用Java编写的免费开源的跨平台的 Java API,它可以创建和维护操作各种符合Office Open XML(OOXML)标准和微软的OLE 2复合文 ...
- PHP导入导出excel表格图片的代码和方法大全
基本上导出的文件分为两种: 1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件 ...
随机推荐
- 数据库中聚合索引(MySQL和SQL Server区别)
一.聚集索引和非聚集索引 聚集索引:类似字典的拼音目录.表中的数据按照聚集索引的规则来存储的.就像新华字典.整本字典是按照A-Z的顺序来排列.这也是一个表只能有一个聚集索引的原因.因为这个特点,具体索 ...
- Destoon二开必看执行流程
<?php 代码首先包含common.inc.php文件 在common.inc.php文件中,首先定义常量. define('IN_DESTOON', true); define('IN_AD ...
- python_面向对象——反射
1.反射 四个方法:getattr() 获取 class Person(): def __init__(self,name,age): self.name = name self.age = age ...
- MyBatis模糊查询和多条件查询
一.ISmbmsUserDao层 //根据姓名模糊查询 public List<Smbms> getUser(); //多条件查询 public List<Smbms> get ...
- sql的九个常用语句是什么
一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数 ...
- IDEA解决maven多module出现多root的问题
背景 maven多module项目,maven窗口显示多个root 问题原因 打开父模块pom.xml文件,检查<modules/>标签,发现没有将子模块项目放到<modules/& ...
- list, vector, map, set 区别与用法比较
List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]. Vector对于随机 ...
- luogu 4587
假设当前已经组合好了 $[1, x]$ ,设 $ans = x + 1$ :显然初始时 $x = 0, ans = 1$ 我们另 $y = \sum_{i = l} ^ {r} (w_i <= ...
- 在其他博客里看到的比较好的map用法,进行储存啦啦~ x
1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 2.map的功能 自 ...
- 爬虫(六):Selenium库使用
一:Selenium简介 selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处 ...