SAP ABAP OPENXML生成Excel
FUNCTION zfi_create_openxml_excel.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(I_DATA) TYPE REF TO DATA
*" EXPORTING
*" REFERENCE(E_DOCUMENT_XSTR) TYPE XSTRING
*" TABLES
*" T_FCAT STRUCTURE LVC_S_FCAT
*"----------------------------------------------------------------------
DATA: l_blank_doc TYPE REF TO cl_abap_zip,
l_converter TYPE REF TO cl_abap_conv_out_ce.
DATA: lv_xml TYPE string,
lv_timestamp TYPE timestamp,
lv_utc TYPE string,
lv_utc_str TYPE string.
DATA: lv_worksheet_name TYPE string VALUE 'Sheet1',
lv_meta_title TYPE string,
lv_meta_subject TYPE string,
lv_meta_description TYPE string,
lv_meta_keywords TYPE string.
DATA: lv_row TYPE i,
lv_column TYPE i,
lv_index TYPE sy-index VALUE 0,
lv_index_str TYPE string,
lv_excel_column TYPE char2,
lv_row_str TYPE string,
lv_str TYPE string,
lv_count TYPE i,
lv_count_str TYPE string.
FIELD-SYMBOLS: <fs_table> TYPE ANY TABLE,
<ls_value>.
CHECK i_data IS NOT INITIAL AND t_fcat[] IS NOT INITIAL.
ASSIGN i_data->* TO <fs_table>.
lv_row = lines( <fs_table> ) + 1.
lv_column = lines( t_fcat[] ).
* Create the empty zip package
CREATE OBJECT l_blank_doc.
* Create the obligatory xl/worksheets/sheet1.xml
lv_xml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`. "#EC NOTEXT
lv_xml = lv_xml && `<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main`. "#EC NOTEXT
lv_xml = lv_xml && `" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships`. "#EC NOTEXT
lv_xml = lv_xml && `" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006`. "#EC NOTEXT
lv_xml = lv_xml && `" mc:Ignorable="x14ac xr xr2 xr3`. "#EC NOTEXT
lv_xml = lv_xml && `" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac`. "#EC NOTEXT
lv_xml = lv_xml && `" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision`. "#EC NOTEXT
lv_xml = lv_xml && `" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2`. "#EC NOTEXT
lv_xml = lv_xml && `" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3`. "#EC NOTEXT
lv_xml = lv_xml && `" xr:uid="{00000000-0001-0000-0000-000000000000}">`. "#EC NOTEXT
lv_row_str = lv_row.
PERFORM frm_get_excel_column USING lv_column CHANGING lv_excel_column.
lv_str = '"A1:' && lv_excel_column && lv_row_str && '"'.
CONDENSE lv_str NO-GAPS.
lv_xml = lv_xml && '<dimension ref=' && lv_str && '/>'. "#EC NOTEXT
CLEAR: lv_row_str, lv_excel_column, lv_str.
lv_xml = lv_xml && `<sheetViews><sheetView tabSelected="1" workbookViewId="0"><selection activeCell="A1" sqref="A1"/></sheetView></sheetViews>`. "#EC NOTEXT
* sheetdata
lv_xml = lv_xml && `<sheetData>`. "#EC NOTEXT
* rows
DO lv_row TIMES.
lv_row_str = sy-index.
lv_row_str = lv_row_str.
CONDENSE lv_row_str NO-GAPS.
lv_xml = lv_xml && '<row r="' && lv_row_str && '" spans="1:13" x14ac:dyDescent="0.25">'. "#EC NOTEXT
DO lv_column TIMES.
PERFORM frm_get_excel_column USING sy-index CHANGING lv_excel_column.
lv_index_str = lv_index.
CONDENSE lv_index_str NO-GAPS.
lv_xml = lv_xml && '<c r="' && lv_excel_column && lv_row_str && '" t="s"><v>' && lv_index_str && '</v></c>'. "#EC NOTEXT
lv_index = lv_index + 1.
CLEAR: lv_excel_column, lv_index_str.
ENDDO.
lv_xml = lv_xml && '</row>'. "#EC NOTEXT
CLEAR: lv_row_str.
ENDDO.
lv_xml = lv_xml && `</sheetData>`. "#EC NOTEXT
lv_xml = lv_xml && `<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>`. "#EC NOTEXT
lv_xml = lv_xml && `</worksheet>`. "#EC NOTEXT
l_converter = cl_abap_conv_out_ce=>create( ).
l_converter->write( data = lv_xml ).
l_blank_doc->add( name = 'xl/worksheets/sheet1.xml' content = l_converter->get_buffer( ) ). "#EC NOTEXT
FREE l_converter.
* Create the obligatory xl/sharedStrings.xml
lv_count = lv_row * lv_column.
lv_count_str = lv_count.
CONDENSE lv_count_str NO-GAPS.
lv_xml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`. "#EC NOTEXT
lv_xml = lv_xml && `<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="`. "#EC NOTEXT
lv_xml = lv_xml && lv_count_str && '" uniqueCount="' && lv_count_str && '">'. "#EC NOTEXT
LOOP AT t_fcat INTO DATA(lw_fcat).
lv_xml = lv_xml && '<si><t>' && lw_fcat-scrtext_l && '</t><phoneticPr fontId="1" type="noConversion"/></si>'. "#EC NOTEXT
CLEAR: lw_fcat.
ENDLOOP.
LOOP AT <fs_table> ASSIGNING FIELD-SYMBOL(<ls_data>).
DO lv_column TIMES.
ASSIGN COMPONENT sy-index OF STRUCTURE <ls_data> TO <ls_value>.
IF sy-subrc = 0.
lv_str = <ls_value>.
REPLACE ALL OCCURRENCES OF '&' IN lv_str WITH '&'.
REPLACE ALL OCCURRENCES OF '<' IN lv_str WITH '<'.
REPLACE ALL OCCURRENCES OF '>' IN lv_str WITH '>'.
REPLACE ALL OCCURRENCES OF `'` IN lv_str WITH '''.
REPLACE ALL OCCURRENCES OF '"' IN lv_str WITH '"'.
lv_xml = lv_xml && '<si><t>' && lv_str && '</t><phoneticPr fontId="1" type="noConversion"/></si>'. "#EC NOTEXT
ENDIF.
CLEAR: lv_str.
ENDDO.
ENDLOOP.
lv_xml = lv_xml && `</sst>`. "#EC NOTEXT
l_converter = cl_abap_conv_out_ce=>create( ).
l_converter->write( data = lv_xml ).
l_blank_doc->add( name = 'xl/sharedStrings.xml' content = l_converter->get_buffer( ) ). "#EC NOTEXT
FREE l_converter.
* Create the obligatory [Content_Types].xml
lv_xml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`. "#EC NOTEXT
lv_xml = lv_xml && `<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">`. "#EC NOTEXT
lv_xml = lv_xml && `<Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Default Extension="xml" ContentType="application/xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `</Types>`. "#EC NOTEXT
l_converter = cl_abap_conv_out_ce=>create( ).
l_converter->write( data = lv_xml ).
l_blank_doc->add( name = '[Content_Types].xml' content = l_converter->get_buffer( ) ). "#EC NOTEXT
FREE l_converter.
* Create the obligatory _rels/.rels
lv_xml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`. "#EC NOTEXT
lv_xml = lv_xml && `<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">`. "#EC NOTEXT
lv_xml = lv_xml && `<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `</Relationships>`. "#EC NOTEXT
l_converter = cl_abap_conv_out_ce=>create( ).
l_converter->write( data = lv_xml ).
l_blank_doc->add( name = '_rels/.rels' content = l_converter->get_buffer( ) ). "#EC NOTEXT
FREE l_converter.
* Create the obligatory docProps/app.xml
lv_xml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`. "#EC NOTEXT
lv_xml = lv_xml && `<Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" `. "#EC NOTEXT
lv_xml = lv_xml && `xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">`. "#EC NOTEXT
lv_xml = lv_xml && `<Application>SAP NetWeaver Application Server</Application>`. "#EC NOTEXT
lv_xml = lv_xml && `<DocSecurity>0</DocSecurity>`. "#EC NOTEXT
lv_xml = lv_xml && `<TitlesOfParts>`. "#EC NOTEXT
lv_xml = lv_xml && `<vt:vector size="2" baseType="lpstr"><vt:lpstr>` && lv_worksheet_name && `</vt:lpstr>`. "#EC NOTEXT
lv_xml = lv_xml && `<vt:lpstr>HELP</vt:lpstr></vt:vector>`. "#EC NOTEXT
lv_xml = lv_xml && `</TitlesOfParts>`. "#EC NOTEXT
lv_xml = lv_xml && `<Company>SAP</Company>`. "#EC NOTEXT
lv_xml = lv_xml && `<AppVersion>7.1000</AppVersion>`. "#EC NOTEXT
lv_xml = lv_xml && `</Properties>`. "#EC NOTEXT
l_converter = cl_abap_conv_out_ce=>create( ).
l_converter->write( data = lv_xml ).
l_blank_doc->add( name = 'docProps/app.xml' content = l_converter->get_buffer( ) ). "#EC NOTEXT
FREE l_converter.
* Create the obligatory docProps/core.xml
lv_xml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`. "#EC NOTEXT
lv_xml = lv_xml && `<cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" `. "#EC NOTEXT
lv_xml = lv_xml && `xmlns:dc="http://purl.org/dc/elements/1.1/" `. "#EC NOTEXT
lv_xml = lv_xml && `xmlns:dcterms="http://purl.org/dc/terms/" `. "#EC NOTEXT
lv_xml = lv_xml && `xmlns:dcmitype="http://purl.org/dc/dcmitype/" `. "#EC NOTEXT
lv_xml = lv_xml && `xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">`. "#EC NOTEXT
lv_xml = lv_xml && `<dc:title>` && lv_meta_title && `</dc:title>`. "#EC NOTEXT
lv_xml = lv_xml && `<dc:subject>` && lv_meta_subject && `</dc:subject>`. "#EC NOTEXT
lv_xml = lv_xml && `<dc:creator>` && sy-uname && `</dc:creator>`. "#EC NOTEXT
lv_xml = lv_xml && `<cp:keywords>` && lv_meta_keywords && `</cp:keywords>`. "#EC NOTEXT
lv_xml = lv_xml && `<dc:description>` && lv_meta_description && `</dc:description>`. "#EC NOTEXT
GET TIME STAMP FIELD lv_timestamp. " Get current UTC
lv_utc = lv_timestamp.
CONCATENATE lv_utc+0(4) '-' lv_utc+4(2) '-' lv_utc+6(2) 'T' lv_utc+8(2) ':' lv_utc+10(2) ':' lv_utc+12(2) 'Z' INTO lv_utc_str. "#EC NOTEXT
lv_xml = lv_xml && `<dcterms:created xsi:type="dcterms:W3CDTF">` && lv_utc_str && `</dcterms:created>`. "#EC NOTEXT
lv_xml = lv_xml && `<dcterms:modified xsi:type="dcterms:W3CDTF">` && lv_utc_str && `</dcterms:modified>`. "#EC NOTEXT
lv_xml = lv_xml && `</cp:coreProperties>`. "#EC NOTEXT
l_converter = cl_abap_conv_out_ce=>create( ).
l_converter->write( data = lv_xml ).
l_blank_doc->add( name = 'docProps/core.xml' content = l_converter->get_buffer( ) ). "#EC NOTEXT
FREE l_converter.
* Create the obligatory xl/_rels/workbook.xml.rels
lv_xml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`. "#EC NOTEXT
lv_xml = lv_xml && `<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">`. "#EC NOTEXT
lv_xml = lv_xml && `<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/>`. "#EC NOTEXT
lv_xml = lv_xml && `</Relationships>`. "#EC NOTEXT
l_converter = cl_abap_conv_out_ce=>create( ).
l_converter->write( data = lv_xml ).
l_blank_doc->add( name = 'xl/_rels/workbook.xml.rels' content = l_converter->get_buffer( ) ). "#EC NOTEXT
FREE l_converter.
* Create the obligatory xl/styles.xml
lv_xml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`. "#EC NOTEXT
lv_xml = lv_xml && `<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">`. "#EC NOTEXT
lv_xml = lv_xml && `<fonts count="2">`. "#EC NOTEXT
lv_xml = lv_xml && `<font><sz val="11"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font>`. "#EC NOTEXT
lv_xml = lv_xml && `<font><b/><sz val="11"/><color theme="1"/><name val="Calibri"/><family val="2"/><scheme val="minor"/></font>`. "#EC NOTEXT
lv_xml = lv_xml && `</fonts>`. "#EC NOTEXT
lv_xml = lv_xml && `<fills>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="none"/></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="gray125" /></fill>`. "#EC NOTEXT
"lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor theme="0" tint="-0.14999847407452621" /><bgColor indexed="64"/></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor rgb="FFDBD5BF" /></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor rgb="FFE2EBF1" /></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor rgb="FFF3E9BE" /></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor rgb="FFEDF4F8" /></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor theme="9" tint="0.59999389629810485" /><bgColor indexed="64"/></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor rgb="FFFC6868" /><bgColor indexed="64"/></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor theme="4" tint="0.59999389629810485" /><bgColor indexed="64"/></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor theme="6" tint="0.59999389629810485" /><bgColor indexed="64"/></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor rgb="FFFFFF00" /><bgColor indexed="64"/></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor rgb="FFFF3300" /><bgColor indexed="64"/></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `<fill><patternFill patternType="solid"><fgColor rgb="FF92D050" /><bgColor indexed="64"/></patternFill></fill>`. "#EC NOTEXT
lv_xml = lv_xml && `</fills>`. "#EC NOTEXT
lv_xml = lv_xml && '<borders count="2"><border><left/><right/><top/><bottom/><diagonal/></border>'. "#EC NOTEXT
lv_xml = lv_xml && '<border><left style="thin"><color rgb="FFFFFFFF" /></left><right style="thin"><color rgb="FFFFFFFF" /></right>'. "#EC NOTEXT
lv_xml = lv_xml && '<top style="thin"><color rgb="FFFFFFFF" /></top><bottom style="thin"><color rgb="FFFFFFFF" /></bottom><diagonal /></border>'. "#EC NOTEXT
lv_xml = lv_xml && '</borders>'. "#EC NOTEXT
lv_xml = lv_xml && `<cellStyleXfs>`. "#EC NOTEXT
lv_xml = lv_xml && `<xf numFmtId="49" fontId="0" fillId="0" borderId="0"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<xf numFmtId="49" applyProtection="0" fontId="1" fillId="2" borderId="1" applyFont="0"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<xf numFmtId="49" applyProtection="0" fontId="1" fillId="3" borderId="1" applyFont="0"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<xf numFmtId="49" applyProtection="0" fontId="1" fillId="4" borderId="1" applyFont="0"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<xf numFmtId="49" applyProtection="0" fontId="1" fillId="5" borderId="1" applyFont="0"/>`. "#EC NOTEXT
lv_xml = lv_xml && `</cellStyleXfs>`. "#EC NOTEXT
lv_xml = lv_xml && `<cellXfs count="2"><xf numFmtId="49" fontId="0" fillId="0" borderId="0" xfId="0"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<xf numFmtId="49" fontId="1" fillId="2" borderId="0" xfId="0" applyFont="1" applyFill="1" /></cellXfs>`. "#EC NOTEXT
lv_xml = lv_xml && `<cellStyles count="1"><cellStyle name="Normal" xfId="0" builtinId="0"/></cellStyles>`. "#EC NOTEXT
lv_xml = lv_xml && `<dxfs count="0"/><tableStyles count="0" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleLight16"/>`. "#EC NOTEXT
lv_xml = lv_xml && `</styleSheet>`. "#EC NOTEXT
l_converter = cl_abap_conv_out_ce=>create( ).
l_converter->write( data = lv_xml ).
l_blank_doc->add( name = 'xl/styles.xml' content = l_converter->get_buffer( ) ). "#EC NOTEXT
FREE l_converter.
* Create the obligatory xl/workbook.xml
lv_xml = `<?xml version="1.0" encoding="UTF-8" standalone="yes"?>`. "#EC NOTEXT
lv_xml = lv_xml && `<workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">`. "#EC NOTEXT
lv_xml = lv_xml && `<fileVersion appName="xl" lastEdited="1" lowestEdited="1" rupBuild="4505"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<workbookPr filterPrivacy="1" defaultThemeVersion="124226"/>`. "#EC NOTEXT
lv_xml = lv_xml && `<bookViews><workbookView xWindow="240" yWindow="105" windowWidth="14805" windowHeight="8010"/></bookViews>`. "#EC NOTEXT
lv_xml = lv_xml && `<sheets>`. "#EC NOTEXT
lv_xml = lv_xml && `<sheet name="` && lv_worksheet_name && `" sheetId="1" r:id="rId1"/>`. "#EC NOTEXT
lv_xml = lv_xml && `</sheets>`. "#EC NOTEXT
lv_xml = lv_xml && `<calcPr calcId="124519"/>`. "#EC NOTEXT
lv_xml = lv_xml && `</workbook>`. "#EC NOTEXT
l_converter = cl_abap_conv_out_ce=>create( ).
l_converter->write( data = lv_xml ).
l_blank_doc->add( name = 'xl/workbook.xml' content = l_converter->get_buffer( ) ). "#EC NOTEXT
FREE l_converter.
e_document_xstr = l_blank_doc->save( ).
DATA: l_length TYPE i,
l_xml_stream TYPE xml_rawdata.
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
EXPORTING
buffer = e_document_xstr
IMPORTING
output_length = l_length
TABLES
binary_tab = l_xml_stream.
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
bin_filesize = l_length
filetype = 'BIN'
filename = 'E:/123RRR.XLSX'
CHANGING
data_tab = l_xml_stream
EXCEPTIONS
OTHERS = 1.
ENDFUNCTION.
*&---------------------------------------------------------------------*
*& Form FRM_GET_EXCEL_COLUMN
*&---------------------------------------------------------------------*
FORM frm_get_excel_column USING uv_column CHANGING cv_excel_column.
DATA: lv_mod TYPE i,
lv_div TYPE i.
lv_mod = uv_column MOD 26 - 1."余数
lv_div = ( uv_column - 1 ) DIV 26 - 1."商
IF lv_div >= 0.
cv_excel_column = sy-abcde+lv_div(1) && sy-abcde+lv_mod(1).
ELSE.
cv_excel_column = sy-abcde+lv_mod(1).
ENDIF.
CLEAR: lv_mod, lv_div.
ENDFORM. " FRM_GET_EXCEL_COLUMN