TEXT_CONVERT_XLS_TO_SAP实例

使用:gui_upload去上传excel数据,每次都出现乱码,不管中文英文都乱码。 至今不知道gui_upload是否支持excel文件上传,。

使用:ALSM_EXCEL_TO_INTERNAL_TABLE不能使用自定义的格式,必须要定义一个和它规定的格式的内表来接收传来的值,然后要loop内表,再一条一条灌到自定义格式的内表中。

最后用:TEXT_CONVERT_XLS_TO_SAP,这个函数用起来挺方便,没有乱码现象,还可以去掉首行,最重要的是能返回自己需要的格式的内表,缺点是效率比较慢

以下是实例:

  1. TYPE-POOLS truxs.
  2. DATA:it_raw TYPE truxs_t_text_data.
  3.  
  4. *定义一个内表来存储数据,内表的列数和要传得数据的列数要相同,其按照列来匹配传值
  5. DATA: BEGIN OF gt_data OCCURS ,
  6. col1 TYPE char10,
  7. col2 TYPE char10,
  8. END OF gt_data.
  9. *生成一个parameters元素,给其加上on value-request事件(在parameters上点击F4时触发)
  10. PARAMETERS:p_file TYPE rlgrap-filename.
  11. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
  12. CLEAR p_file.
  13. CALL FUNCTION 'F4_FILENAME'
  14. IMPORTING
  15. file_name = p_file."返回文件名
  16. *Excel传值
  17. CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
  18. EXPORTING
  19. * I_FIELD_SEPERATOR =
  20. * i_line_header = 'X' "X表示带抬头行的EXCEL的抬头行不传进内表,否则EXCEL不要带抬头
  21. i_tab_raw_data = it_raw " WORK TABLE
  22. i_filename = p_file
  23. TABLES
  24. i_tab_converted_data = gt_data[] "ACTUAL DATA
  25. EXCEPTIONS
  26. conversion_failed =
  27. OTHERS = .
  28. IF sy-subrc <> .
  29. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  30. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  31. ENDIF.
  32. ENDFORM. "exceltotab

上载函数TEXT_CONVERT_XLS_TO_SAP的问题

使用上载函数TEXT_CONVERT_XLS_TO_SAP导入数据到SAP系统时,如果数量、金额小于1,则导入时被自动放大1000或100倍(如果数据为3位小数,则放大1000倍,如果数据为2位小数,则放大100倍)。例如:0.500 吨的数量 上载后被此函数自动转换为500吨,被放大了1000倍;0.98 CNY的金额,上载后被此函数自动转换为98 CNY,被放大了100倍。

处理:方法一

将上载数据EXCEL中的数量、金额,全部转换为文本(不是只将单元格设置为文本),必须转换为EXCEL单元中左上角为绿色小三角形的文本单元格。设置后再上载此数据,则解决此问题。

处理:方法二

修改程序,把上载后内表:数量、金额字段 全部设置为 字符型 ,上载后,使用 replace 命令去除千分位豆号(建议每个数据执行3-5次),然后将相同的数据 赋值 到另一个内表表(字段相同,只是:数量为数量型、金额为金额型).设置后再上载此数据,则解决此问题。

SAP中本地文件的upload和download的方法

无论是upload还是download,首先要确定文件的路径和名字。下面介绍几种使用文件选择框的方法:
-、使用FM F4_FILENAME
call function 'F4_FILENAME'
    importing
      file_name = filename.
二、使用FM KD_GET_FILENAME_ON_F4
call function 'KD_GET_FILENAME_ON_F4'
    changing
      file_name = p_pcfile.
三、使用FM TB_LIMIT_WS_FILENAME_GET
此FM可以指定默认选择路径,默认文件名,文件的打开目的(MODE,O为读,S为写)以及文件类型等,返回值FILENAME为文件的全路径。
四、使用FM WS_FILENAME_GET
功能同上。例子:

  1. call function 'WS_FILENAME_GET'
  2. exporting
  3. def_filename = 'invoice.txt'
  4. def_path = 'c:/windata/'
  5. mask = ',*.TXT.'
  6. mode = ''
  7. title = 'Find the input file'
  8. importing
  9. filename = t_filename
  10. exceptions
  11. inv_winsys =
  12. no_batch =
  13. selection_cancel =
  14. selection_error =
  15. others = .

五、使用Class cl_gui_frontend_services的静态方法file_open_dialog.

此方法功能强大,可以修饰文件选择框,指定默认选择路径,设置文件类型过滤,同时打开多个文件,返回用户操作等,例子:

  1. call method cl_gui_frontend_services=>file_open_dialog
  2. exporting
  3. window_title = 'Select File'
  4. default_extension = 'xls'
  5. file_filter = cl_gui_frontend_services=>filetype_excel
  6. multiselection = ' '
  7.  
  8. changing
  9. file_table = it_tab
  10. rc = gd_subrc.

文件UPLOAD方法(转成内表):

一、最常用FM的是:GUI_UPLOAD
有同等作用的是CLASS cl_gui_frontend_services的静态方法gui_upload,文件可以按二进制或文本格式上传,数值和日期等依赖于用户的设置。
上传二进制文件时,内表通常定义为只含一个数据类型为X的field,如:

  1. data:begin of itab occurs ,
  2. raw() type X,
  3. end fo itab.
  4. CALL FUNCTION 'GUI_UPLOAD'
  5. exporting
  6. filetype = 'BIN'
  7. filename = 'C:/DOWNLOAD.BIN'
  8. tables
  9. data_tab = itab.

主要参数:输入有filename 要上传文件的完成路径, filetype 包括'BIN' 'DAT' 'ASC'等,codepage 以数字编号的字符集,如8400是简体中文

    输出有data_tab 储存文件中数据的内表
二、对上传excel数据可用FM TEXT_CONVERT_XLS_TO_SAP
因为输出的I_TAB_CONVERTED_DATA类型为任意的standard table,所以此FM能方便的把excel中内容转化成格式相同的内表中。

  1. field-symbols: type standard table.
  2. call function 'TEXT_CONVERT_XLS_TO_SAP'
  3. exporting
  4. * I_FIELD_SEPERATOR =
  5. * I_LINE_HEADER =
  6. i_tab_raw_data = raw_data
  7. i_filename = excel_file
  8. tables
  9. i_tab_converted_data =
  10. exceptions
  11. conversion_failed =
  12. others = .

参数i_tab_raw_data虽为改办field,但好像没什么作用,传入一个空数据也可正常使用。

三、以另外途径上传excel文件:ALSM_EXCEL_TO_INTERNAL_TABLE

  1. call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
  2. exporting
  3. filename = p_file
  4. i_begin_col = p_scol
  5. i_begin_row = p_srow
  6. i_end_col = p_ecol
  7. i_end_row = p_erow
  8. tables
  9. intern = i_intern
  10. exceptions
  11. inconsistent_parameters =
  12. upload_ole =
  13. others = .

此FM可以限制从excel文件中第几行第几列开始,一次上传多少行多少列,但一次上传的最大行数为9999,是由接收数据的内表intern的定义来限制的。

所以如果要上传多于9999行的数据,要编码分批上传实现的。而intern不是直接与excel数据格式相符的内表,是系统定义好的,包含了行号、列号、数据值等,具体的
请参照系统定义,因此要想转成自己定义符合格式的内表,可用下面代码实现:

  1. field-symbols : <$fs>.
  2. data exception type ref to cx_root.
  3. sort i_intern by row col.
  4. try.
  5. loop at i_intern.
  6. move i_intern-col to index.
  7. assign component index of structure i_table to <$fs>.
  8. move i_intern-value to <$fs>.
  9. at end of row.
  10. append i_table. "user defined internal table to store excel data
  11. clear i_table.
  12. endat.
  13. endloop.
  14. catch cx_root into exception.
  15. message 'Excel data format is wrong,please check' type 'E'.
  16. endtry.

文件DOWNLOAD方法(内表转成文件):
一、最常用FM的是:GUI_UPLOAD
CLASS cl_gui_frontend_services的静态方法gui_upload与此功效相同。重要参数有BIN_FILESIZE FILENAME FILETYPE APPEND CODEPAGE DATA_TAB等,正确传入这些参数即可满足大多常见的需求。
参数简述:BIN_FILESIZE  当要创建二进制的文件进,必须指定文件长度,但要下载成文本文件时,传入此参数会报 FILESIZE_NIT_ALLOWED 错误的。
FILENAME  要存放文件的完整路径,要保证路径有效并且如果文件存在的话没有被打开,否则会报错。
FILETYPE  'ASC' ASCII格式文件,此参数会受到CODEPAGE, TRUNC_TRAILING_BLANKS, 和 TRUNC_TRAILING_BLANKS_EOL等参数的影响。
      'IBM' ASCII文件,但只能包含IBM字符集的字符(CODEPAGE = '1103'),这种格式的文件通常用在软盘上。
   'DAT' 具有单元格形式的文本文件,但直接用excel打开的话,文本内容会受单元格格式影响(如自动会去前导零等)。这种文件可直接再用gui_upload上传到SAP程序中。
   'DBF' dBase格式,对于要用excel打开的数据,此种格式更能保持数据原型,不受excel单元格格式的影响。
   'WK1' Lotus 1-2-3格式。
   'BIN' 二进制格式文件,没有格式和字体集的限制。
APPEND 'X'以追加模式写文件,SPACE 当文件已存在时,以覆盖模式写文件。
CODEPAGE 指定写文件时用的字符集
DATA_TAB 内表,包含要下载成文件的数据

...

另注:当要上传在excel中存放的数据时,要注意sap系统中前导0的问题,解决方法可在excel文件中把0补全(调整单元格格式),或者在使用此类数据前,程序做alpha转换,
使用FM: CONVERSION_EXIT_ALPHA_INPUT, 相反作用的FM: CONVERSION_EXIT_ALPHA_OUTPUT

上载EXCEL到SAP系统的方法之一的更多相关文章

  1. 【HANA系列】SAP 【第一篇】EXCEL连接SAP HANA的方法(ODBC)

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP [第一篇]EXCEL连接 ...

  2. 【HANA系列】SAP 【第二篇】EXCEL连接SAP HANA的方法(ODBC)

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP [第二篇]EXCEL连接 ...

  3. Excel应该这么玩——5、三种数据:Excel也是系统

        Excel最常用的功能就是记录数据,把数据按照行列记录下来.这部分数据是源数据,是业务活动中最原始的流水账,作为后续操作的依据.为了从源数据中得出一定的结论,需要对源数据进行分析得出报表数据. ...

  4. Java(JCo3)与SAP系统相互调用

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. SAP系统联机应用程序帮助

    新安装好的SAP系统,联机帮助是不能用的. 通过菜单中的“帮助-应用程序帮助” 和“帮助-SAP库”都打不开任何帮助页面.这并不是因为SAPgui安装不完整,而是因为SAP的帮助系统本身就不包含在GU ...

  6. 从Excel转Access的一个方法说开去(DataRow的state状态)

    因为客户对access不太熟悉,更喜欢玩EXCEL.但是系统要求导入ACCESS.所以我们得做个把EXCEL转换成Access的小工具.(别问我为啥不让系统直接导入excel....我不知道!),然后 ...

  7. 到底什么样的企业才适合实施SAP系统?

    SAP系统作为全宇宙第一的ERP,号称世界500强里面有80%的企业部署了SAP系统,总部位于德国沃尔多夫市,在全球拥有6万多名员工,遍布全球130个国家,并拥有覆盖全球11,500家企业的合作伙伴网 ...

  8. 终于将SAP系统完全配置通过了

    花了近10天的时间,每天晚上加班加点,终于将SAP S4 1610 IDES系统从零到有,从头到尾配置一遍.目前只启用了一家模拟公司,从基础数据的设置,到销售订单开立(含按单按库需求),跑MRP需求, ...

  9. 创建两个SAP系统之间的RFC信任关系

    一种常见的场景是企业运行着多个SAP系统(ERP/SRM/CRM),用户希望在AA1系统中使用BB1系统的事务.如果直接使用RFC调用另一系统的事务的话,则会弹出登陆框,让用户再次输入帐号密码... ...

随机推荐

  1. 【原】Configuring Oracle Data Guard In Physical Standby Database

    作者:david_zhang@sh [转载时请以超链接形式标明文章] http://www.cnblogs.com/david-zhang-index/p/5042640.html参照文档:https ...

  2. Java知多少(109)数据库更新

    数据库更新操作包括数据表创建.删除.以及数据表记录的增加.删除.修改等操作.如果利用数据 SQL命令实现,则利用Statement对旬的executeUpdate()方法,执行SQL的update语句 ...

  3. 修改efi分区

    换了ssd硬盘,速度真快! 我特意准备了一个efi分区(fat32,忘记指定efi了),然而win10安装时不能指定启动位置,自己创建了一块. 下面我们把让win10使用自己创建的efi分区. 以管理 ...

  4. Lua中调用C函数

    Lua利用一个虚拟的堆栈来给C传递值或从C获取值.每当Lua调用C函数,都会获得一个新的堆栈,该堆栈初始包含所有的调用C函数所需要的参数值(Lua传给C函数的调用实参),并且C函数执行完毕后,会把返回 ...

  5. 爬虫技术 -- 基础学习(一)HTML规范化(附特殊字符编码表)

    最近在做网页信息提取这方面的,由于没接触过这系列的知识点,所以逛博客,看文档~~看着finallyly大神的博文和文档,边看边学习边总结~~ 对网站页面进行信息提取,需要进行页面解析,解析的方法有以下 ...

  6. 剑指架构师系列-InnoDB存储引擎、Spring事务与缓存

    事务与锁是不同的.事务具有ACID属性: 原子性:持久性:由redo log重做日志来保证事务的原子性和持久性,一致性:undo log用来保证事务的一致性隔离性:一个事务在操作过程中看到了其他事务的 ...

  7. eclipse luna 安装 Hadoop 1.2.1 eclipse-plugin

    博主最近学习Hadoop 1.2.1,从多个搜索引擎的搜索结果当中汇合得出本文Hadoop 1.2.1 Eclipse-plugin安装过程介绍,如果你是从网上下载hadoop-eclipse-plu ...

  8. IOS中对象的归档

    ios提供了两个类 NSKeyedArichiver NSKeyedUnarchiver对自定义对象进行归档 和解档操作 归档常见方法 - (void)encodeObject:(id)objv fo ...

  9. FXForms,自动生成iOS表单

    1.简介 FXForms是一个简单的表单提交框架,他的作者是鼎鼎大名的 Nick Lockwood,你也许听说过他的其他的一些框架,比如 iCarousel. 为什么使用FxForms? 表单处理简单 ...

  10. C#开源资源项目

    一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(as ...