使用ZIF_EXCEL_READER〜LOAD创建ZCL_EXCEL_READER_2007对象

2020-08-27 00:00发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好ZIP,Excel和ABAP2XLSX专家

我想将通过事务CV01n已上载到SAP DB表中DMS的给定Excel文件(.xls)(例如DRAW等)转换为excel_reader_2007对象。

此后,我希望能够处理excel对象,并将报告数据插入该模板提供的正确单元格中。

我已经管理好了这一点,已经使用这种方法在excel类中读取了文件内容(类型:xstring):

...

me-> mv_content = me-> raw_to_xstring(input = lt_orblk)。

...

之后,我尝试实例化excel_reader_2007类:

...

创建对象lo_excel_reader类型zcl_excel_reader_2007。
co_excel = lo_excel_reader-> zif_excel_reader〜load(

me-> mv_template_xstring)。

....

在此加载接口方法中,ixml是从zip归档文件中提取的-无论在这里如何处理rels事情:

...

me-> excel2007 = i_excel2007。
rels = me-> get_ixml_from_zip_archive('_rels/.rels')。

....

此方法立即调用下一个方法:get_from_zip_archive。

...

content = me-> get_from_zip_archive(i_filename)。 " _rels/.rels

然后,用这种方法创建并加载一个zip对象。

...

创建对象me-> zip。 " CL_ABAP_ZIP

zip->加载(
导出
zip = me-> excel2007

...

我认为这种加载方法已经成为麻烦的制造者:

在第75行中,由于偏移量为0,maxlength = 3601404且zip + offset(4)='D0CF11E0'而从不'504B0304',因此什么也不做

...

偏移量 file_no = file_no +1。
在文件分配上附加首行。
在exts分配上附加首行。

...

但是zip-> load(me-> excel2007)毫无例外地运行,但是表'Files'不会被填充。 这很关键,因为在方法get_from_zip_archive中的下一个ZIP方法中,将尝试读取zip文件:

...

zip-> get(
导出
名称= i_filename
导入
content = r_content"目录

....

在这里,从表文件中读取数据当然会因zip_index_error的增加而失败。

IF索引为初始值。
读取表文件,传输不包含键名称为name的字段。
如果sy-subrc不是初始值。
引起zip_index_error。 " #EC RAISE_OK
ENDIF。
索引= sy-tabix。
ENDIF。

现在,有人可以告诉我, 我如何获取我的xstring-内容已成功传输到ZIP或ZCL_EXCEL_READER_2007类。

出了什么问题?

是否可能与前端的安装有关,或者xls可能是2002版本?`

将其另存为.xml并没有帮助。 我已经尝试过了。

我将不胜感激!

________________________________________________________________________________________________________________

系统版本为ECC 6.0,SAP-Basis 7.31,ABAP2XLSX-Version 5.0(对7.0的更改也不起作用-已经尝试过)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


您好ZIP,Excel和ABAP2XLSX专家

我想将通过事务CV01n已上载到SAP DB表中DMS的给定Excel文件(.xls)(例如DRAW等)转换为excel_reader_2007对象。

此后,我希望能够处理excel对象,并将报告数据插入该模板提供的正确单元格中。

我已经管理好了这一点,已经使用这种方法在excel类中读取了文件内容(类型:xstring):

...

me-> mv_content = me-> raw_to_xstring(input = lt_orblk)。

...

之后,我尝试实例化excel_reader_2007类:

...

创建对象lo_excel_reader类型zcl_excel_reader_2007。
co_excel = lo_excel_reader-> zif_excel_reader〜load(

me-> mv_template_xstring)。

....

在此加载接口方法中,ixml是从zip归档文件中提取的-无论在这里如何处理rels事情:

...

me-> excel2007 = i_excel2007。
rels = me-> get_ixml_from_zip_archive('_rels/.rels')。

....

此方法立即调用下一个方法:get_from_zip_archive。

...

content = me-> get_from_zip_archive(i_filename)。 " _rels/.rels

然后,用这种方法创建并加载一个zip对象。

...

创建对象me-> zip。 " CL_ABAP_ZIP

zip->加载(
导出
zip = me-> excel2007

...

我认为这种加载方法已经成为麻烦的制造者:

在第75行中,由于偏移量为0,maxlength = 3601404且zip + offset(4)='D0CF11E0'而从不'504B0304',因此什么也不做

...

偏移量 file_no = file_no +1。
在文件分配上附加首行。
在exts分配上附加首行。

...

但是zip-> load(me-> excel2007)毫无例外地运行,但是表'Files'不会被填充。 这很关键,因为在方法get_from_zip_archive中的下一个ZIP方法中,将尝试读取zip文件:

...

zip-> get(
导出
名称= i_filename
导入
content = r_content"目录

....

在这里,从表文件中读取数据当然会因zip_index_error的增加而失败。

IF索引为初始值。
读取表文件,传输不包含键名称为name的字段。
如果sy-subrc不是初始值。
引起zip_index_error。 " #EC RAISE_OK
ENDIF。
索引= sy-tabix。
ENDIF。

现在,有人可以告诉我, 我如何获取我的xstring-内容已成功传输到ZIP或ZCL_EXCEL_READER_2007类。

出了什么问题?

是否可能与前端的安装有关,或者xls可能是2002版本?`

将其另存为.xml并没有帮助。 我已经尝试过了。

我将不胜感激!

________________________________________________________________________________________________________________

系统版本为ECC 6.0,SAP-Basis 7.31,ABAP2XLSX-Version 5.0(对7.0的更改也不起作用-已经尝试过)

付费偷看设置
发送
3条回答
N-Moskvin
1楼 · 2020-08-27 00:45.采纳回答

已解决:DMS(文档管理系统)中的.xls-template版本是Excel 2002。

我在DMS中上传了一个Excel 2010版本,然后它起作用了。

具有2002 Excel版本始终会使用zip + offset(4)=

创建本地标头

'D0CF11E0'。


哎,真难
2楼-- · 2020-08-27 00:37

嗨,

我对从DMS读取XLS模板,然后将数据从其他XLS文件和SAP表填充到正确的单元格中有相同的要求。

我什至不知道如何开始。 您能否分享您实施的解决方案?

当学会了学习
3楼-- · 2020-08-27 00:46

我正面临类似的问题。 您是否有步骤将Excel 2010版本加载到DMS? 谢谢。

一周热门 更多>