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文件 ...
随机推荐
- JDBC_通过DriverManager获得数据库连接
package day_18; import org.junit.Test; import java.io.InputStream; import java.sql.*; import java.sq ...
- reverse函数的实现
用递归的方法实现字符串的倒叙 #include <string.h> void reverse_my(char *a,int len) { int tmp;//中间值 if(len < ...
- Spring MVC 学习笔记(一)
• 1.SpringMVC概述 • 2.SpringMVC的HelloWorld • 3.使用@RequestMapping映射请求 • 4.映射请求参数&请求头 • 5.处理模型数据 • 6 ...
- Selenium常用API的使用java语言之4-环境安装之Selenium
1.通过jar包安装 点击Selenium下载 链接 你会看到Selenium Standalone Server的介绍: The Selenium Server is needed in order ...
- LOJ 103子串查找——用hash代替kmp算法
题意 给出两个字符串 $s_1,s_2$,求 $s_2$ 在 $s_1$ 中出现的次数. 分析 预处理出两个字符串的哈希值,再逐位比较. 时间复杂度为 $O(n+m)$,和 $kmp$ 算法一样. 可 ...
- 什么是php面向对象及面向对象的三大特性
什么是面向对象? 面向对象编程,也就是我们常说的OOP,其实是面向对象的一部分.面向对象一共有3个部分:面向对象分析(OOA).面向对象设计(OOD).面向对象编程(OOP).我们现在将要学习的就是面 ...
- CH5101 LCIS(最长公共上升子序列) 题解
每日一题 day16 打卡 Analysis 设F[i,j]表示A[1..i]与B[1..j]并且以B[j]结尾的两段最长公共上升子序列,那么我们可以发现这样的转移 (1)A[i]==B[j]时 F[ ...
- bzoj 2563: 阿狸和桃子的游戏 贪心
这个真的好巧妙啊~ 如果只考虑点权的话显然直接按照权值大小排序即可. 但是加入了边权,就有了一个决策的问题. 于是,我们将边权分一半,分给两个端点. 如果一个人拿了两个端点,则边权都会加上. 否则,边 ...
- learning scala pattern matching 03
code: package com.aura.scala.day01 object patternMatching03 { //当不同类型对象需要调用不同方法时,仅匹配类型的模式非常有用. def g ...
- 系列属性(offset、scroll、client)
一.offset系列属性 <div id="dv"></div> <!-- 已在style标签里设置div宽高各100px --> <sc ...