ABAP STRANS转换XML到EXCLE

发布时间 2023-07-27 11:12:33作者: ABAP-武汉-寒夜
*&---------------------------------------------------------------------*
*& Report ZTEST00001
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ztest00001.

"使用xml的下载方式
DATA: lv_path TYPE rlgrap-filename.
DATA: lt_xml_table TYPE STANDARD TABLE OF string,
      lv_xmlstr    TYPE string.
DATA: lv_count TYPE n LENGTH 10.
FIELD-SYMBOLS: <fs_value> TYPE any.
"弹出窗口选择保存路径
PERFORM frm_save_path CHANGING lv_path.
TYPES:BEGIN OF ty_data,

        psttr TYPE  string,

      END OF ty_data.

DATA:gt_data    TYPE TABLE OF ty_data,

     gs_alv_out TYPE ty_data.
DO 1000000 TIMES.
  gs_alv_out-psttr = 'SFDFSFS'.
  APPEND gs_alv_out TO gt_data.
ENDDO.

********关键代码部分*****************************************
DESCRIBE TABLE gt_data LINES lv_count.
lv_count = lv_count + 3.

CALL TRANSFORMATION zfir045_1
SOURCE root = gt_data[]
RESULT XML lv_xmlstr.

REPLACE FIRST OCCURRENCE OF 'encoding="utf-16"' IN lv_xmlstr WITH 'encoding="gbk"'."显示中文
REPLACE FIRST OCCURRENCE OF 'cs_count' IN lv_xmlstr WITH lv_count."行数,替代xml文件里的cs_count
APPEND lv_xmlstr TO lt_xml_table.

********关键代码部分*****************************************

DATA: lv_file TYPE string.
lv_file = lv_path.

CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
    filename                = lv_file
    filetype                = 'ASC'
  TABLES
    data_tab                = lt_xml_table
  EXCEPTIONS
    file_write_error        = 1
    no_batch                = 2
    gui_refuse_filetransfer = 3
    invalid_type            = 4
    OTHERS                  = 5.

MESSAGE '数据下载成功!' TYPE 'S'.

FORM frm_save_path CHANGING pv_path TYPE rlgrap-filename.
  DATA:lv_filename TYPE string,
       lv_path     TYPE string.
  "名字指定
  CONCATENATE '进耗存报表_明细_' sy-datum '.XLS' INTO lv_filename.

  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_filename     = lv_filename
      def_path         = 'D:W'
      mask             = '.XLS'
      mode             = 'S'
      title            = 'DOWNLOAD'
    IMPORTING
      filename         = pv_path
*     RC               =
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
  IF pv_path IS INITIAL.   "选择取消的情况
    MESSAGE e000(su) WITH '已取消操作!'.
  ENDIF.
ENDFORM.

 

<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">

  <tt:root name="ROOT"/>

  <tt:template>
    <?mso-application progid="Excel.Sheet"?>
    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html=
"http://www.w3.org/TR/REC-html40">
      <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
        <Author>马宇</Author>
        <LastAuthor>马宇</LastAuthor>
        <Created>2019-07-29T09:17:10Z</Created>
        <LastSaved>2019-07-29T09:41:41Z</LastSaved>
        <Version>16.00</Version>
      </DocumentProperties>
      <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
        <AllowPNG/>
      </OfficeDocumentSettings>
      <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
        <WindowHeight>7500</WindowHeight>
        <WindowWidth>20490</WindowWidth>
        <WindowTopX>32767</WindowTopX>
        <WindowTopY>32767</WindowTopY>
        <ProtectStructure>False</ProtectStructure>
        <ProtectWindows>False</ProtectWindows>
      </ExcelWorkbook>
      <Styles>
        <Style ss:ID="Default" ss:Name="Normal">
          <Alignment ss:Vertical="Center"/>
          <Borders/>
          <Font ss:Color="#000000" ss:FontName="等线" ss:Size="11" x:CharSet="134"/>
          <Interior/>
          <NumberFormat/>
          <Protection/>
        </Style>
        <Style ss:ID="s62">
          <Alignment ss:Vertical="Top"/>
        </Style>
        <Style ss:ID="s63">
          <Alignment ss:Vertical="Top"/>
          <NumberFormat ss:Format="@"/>
        </Style>
        <Style ss:ID="s64">
          <Alignment ss:Horizontal="Right" ss:Vertical="Top"/>
          <NumberFormat ss:Format="#,##0.000"/>
        </Style>
        <Style ss:ID="s65">
          <Alignment ss:Horizontal="Right" ss:Vertical="Top"/>
          <NumberFormat ss:Format="[$-F400]h:mm:ss\ AM/PM"/>
        </Style>
        <Style ss:ID="s66">
          <Alignment ss:Horizontal="Right" ss:Vertical="Top"/>
          <NumberFormat ss:Format="Short Date"/>
        </Style>
        <Style ss:ID="s67">
          <Alignment ss:Vertical="Top"/>
          <Borders>
            <Border ss:LineStyle="Continuous" ss:Position="Bottom" ss:Weight="1"/>
            <Border ss:LineStyle="Continuous" ss:Position="Left" ss:Weight="1"/>
            <Border ss:LineStyle="Continuous" ss:Position="Right" ss:Weight="1"/>
            <Border ss:LineStyle="Continuous" ss:Position="Top" ss:Weight="1"/>
          </Borders>
          <Interior ss:Color="#C0C0C0" ss:Pattern="Solid"/>
        </Style>
      </Styles>
      <Worksheet ss:Name="Sheet1">
        <Table ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25" ss:ExpandedColumnCount="29" ss:ExpandedRowCount="cs_count" x:FullColumns="1" x:FullRows="1">
          <Row>
            <Cell ss:StyleID="s67">
              <Data ss:Type="String">计划日期</Data>
            </Cell>
          </Row>
          <tt:loop ref=".ROOT">
            <Row>
              <Cell ss:StyleID="s66">
                <Data ss:Type="String">
                  <tt:value ref="PSTTR"/>
                </Data>
              </Cell>
            </Row>
          </tt:loop>
        </Table>
        <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
          <PageSetup>
            <Header x:Margin="0.3"/>
            <Footer x:Margin="0.3"/>
            <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
          </PageSetup>
          <Selected/>
          <Panes>
            <Pane>
              <Number>3</Number>
              <ActiveRow>4</ActiveRow>
              <ActiveCol>1</ActiveCol>
            </Pane>
          </Panes>
          <ProtectObjects>False</ProtectObjects>
          <ProtectScenarios>False</ProtectScenarios>
        </WorksheetOptions>
      </Worksheet>
    </Workbook>
  </tt:template>
</tt:transform>