专栏首页Jerry的SAP技术分享如何使用ABAP代码修改微软office的word文档

如何使用ABAP代码修改微软office的word文档

REPORT zdoc_test.
* probably written in 2014 Summer when I was responsible for CRM ticket processing 
START-OF-SELECTION.

  DATA: lo_document TYPE REF TO cl_docx_document,
        lv_content  TYPE xstring.

  PERFORM get_doc_binary USING 'C:\Users\i042416\Desktop\test.docx' CHANGING lv_content.

  lo_document = cl_docx_document=>load_document( lv_content ).
  CHECK lo_document IS NOT INITIAL.
*  DATA(lo_core_part) = lo_document->get_corepropertiespart( ).
*  DATA(lv_core_data) = lo_core_part->get_data( ).

  DATA(lo_main_part) = lo_document->get_maindocumentpart( ).
  DATA(lv_main_data) = lo_main_part->get_data( ).

  DATA(lo_image_parts) = lo_main_part->get_imageparts( ).
  DATA(lv_image_count) = lo_image_parts->get_count( ).

  DO lv_image_count TIMES.
    DATA(lo_image_part) = lo_image_parts->get_part( sy-index - 1 ).
    DATA(lv_image_data) = lo_image_part->get_data( ).
  ENDDO.

*  DATA(lo_header_parts) = lo_main_part->get_headerparts( ).
*  DATA(lv_header_count) = lo_header_parts->get_count( ).
*
*  DO lv_header_count TIMES.
*    DATA(lo_header_part) = lo_header_parts->get_part( sy-index - 1 ).
*    DATA(lv_header_data) = lo_header_part->get_data( ).
*  ENDDO.

  DATA(lo_new_image_part) = lo_main_part->add_imagepart( iv_content_type = cl_oxml_imagepart=>co_content_type_png ).

  DATA: lv_new_pic TYPE xstring.

  PERFORM get_doc_binary USING 'C:\Users\i042416\Desktop\clipboard.png' CHANGING lv_new_pic.

  lo_new_image_part->feed_data( lv_new_pic ).

  lo_image_parts->append_part( lo_new_image_part ).

  lo_main_part->add_part( lo_new_image_part ).

  lv_main_data = lo_main_part->get_data( ).

  DATA(modified_doc) = lo_document->get_package_data( ).

  BREAK-POINT.

FORM get_doc_binary USING iv_path TYPE string CHANGING cv_binary TYPE xstring.
  CONSTANTS c_linelen TYPE i VALUE 255.
  DATA: wa_data(c_linelen) TYPE x,
        lt_data            LIKE TABLE OF wa_data,
        converter          TYPE REF TO cl_abap_conv_in_ce,
        lv_length          TYPE i.

  CALL METHOD cl_gui_frontend_services=>gui_upload
    EXPORTING
      filename                = iv_path
      filetype                = 'BIN'
    IMPORTING
      filelength              = lv_length
    CHANGING
      data_tab                = lt_data
    EXCEPTIONS
      file_open_error         = 1
      file_read_error         = 2
      no_batch                = 3
      gui_refuse_filetransfer = 4
      invalid_type            = 5
      no_authority            = 6
      unknown_error           = 7
      bad_data_format         = 8
      header_not_allowed      = 9
      separator_not_allowed   = 10
      header_too_long         = 11
      unknown_dp_error        = 12
      access_denied           = 13
      dp_out_of_memory        = 14
      disk_full               = 15
      dp_timeout              = 16
      not_supported_by_gui    = 17
      error_no_gui            = 18
      OTHERS                  = 19.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
    EXPORTING
      input_length = lv_length
    IMPORTING
      buffer       = cv_binary
    TABLES
      binary_tab   = lt_data
    EXCEPTIONS
      failed       = 1
      OTHERS       = 2.
  IF sy-subrc  <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

ENDFORM.

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • jQuery.sap.require

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    Jerry Wang
  • ABAP和Java里关于DEFAULT(默认)机制的一些语言特性

    由此可见新语法比较简洁,能少写3行代码。但是这样有一个缺陷,在新语法下如果it_data内表内不存在object_ext的值为cl_crm_prodil_bo_...

    Jerry Wang
  • How to get ABAP code coverage result

    Jerry Wang
  • 技术分享 | 如何使用 bcc 工具观测 MySQL 延迟

    爱可生测试团队成员,主要负责 TXLE 开源项目相关测试任务,擅长 Python 自动化测试开发,最近醉心于 Linux 性能分析优化的相关知识。

    爱可生开源社区
  • 数据处理|数据查重怎么办?去重,就这么办!

    数据清洗过程中的典型问题:数据分析|R-缺失值处理、数据分析|R-异常值处理和重复值处理,本次简单介绍一些R处理重复值的用法:

    西游东行
  • 大数据之数据采集

    浏览器页面采集: 主要是收集页面的 浏览日志(PV/UV等) 和 交互操作日志(操作事件)。

    奎哥
  • 大数据之如何采集数据

    浏览器页面采集: 主要是收集页面的 浏览日志(PV/UV等) 和 交互操作日志(操作事件)。

    啦啦啦
  • 打动人心的用户体验细节

    image.png 好设计如空气般存在。 传达出对生活的思考,对美的极致追求。 每次看到别具匠心的设计作品,都会微微一笑;抑或忍不住惊叹,哇,暖到心里了! 但...

    BestSDK
  • Go语言入门——进阶语法篇(三)

    Go语言虽然存在指针,但是远比C语言指针简单,且Go语言基本指针不能直接进行指针运算。

    arcticfox
  • 数据采集:如何自动化采集数据?

    举个例子,你做量化投资,基于大数据预测未来股票的波动,根据这个预测结果进行买卖。你当前能够拿到以往股票的所有历史数据,是否可以根据这些数据做出一个预测率高的数据...

    慕白

扫码关注云+社区

领取腾讯云代金券