如何在后台运行模式生成Excel格式文件

如果要生成纯正的Excel格式,一般可以采用普通OLE的方法,或者DOI(本质也是OLE)。但是这个方法有个前提,就是:必须在程序前台运行,并且前台的机器必须装了Office软件。
如何在后台生成Excel格式的文件呢?
本文就是解决这个问题。
 
说明:因为Excel支持XML格式的存储,所以我们使用Transformation program来产生Excel格式的XML文件,所以用这个方法产生的XLS文档还不是纯正的Excel二进制格式的文档,不过已经可以在大多数需要Excel格式的场合使用了,而且可以很方便的添加各种格式,比如字体大小、单元格颜色,,等等
 
需要注意的几点:
1、兼容一般的OpenOffice
2、Office2000之前的版本可能会打不开
3、如果包含图片、图表等,导出可能有困难
 
REPORT  z_barry_test.

DATA:BEGIN OF itab OCCURS 0 ,
       matnr LIKE makt-matnr ,
       maktx LIKE makt-maktx ,
     END OF itab.

DATA: xmlstr TYPE string,
      xml_table TYPE STANDARD TABLE OF string,
      wa_xml LIKE LINE OF xml_table.

DATA:dname(120TYPE c.

START-OF-SELECTION.

  SELECT matnr maktx INTO TABLE itab FROM makt
    UP TO 20 ROWS
    WHERE spras = '1'.

  CALL TRANSFORMATION ztestexcel
    SOURCE table = itab[]
    RESULT XML xmlstr.

  REPLACE FIRST OCCURRENCE OF 'encoding="utf-16"' IN xmlstr WITH 'encoding="gbk"'.
  APPEND xmlstr TO xml_table.

  CALL FUNCTION 'GUI_DOWNLOAD'
    EXPORTING
      filename = 'c:/xmlexcel.xls'
      codepage = '8400'
      filetype = 'ASC'
    TABLES
      data_tab = xml_table.

*  dname = '/usr/sap/TZK/DVEBMGS00/work/xmlexcel.xls'.
*  OPEN DATASET dname FOR OUTPUT IN TEXT MODE ENCODING DEFAULT  .
*  IF sy-subrc NE 0. EXIT. ENDIF.
*  LOOP AT xml_table INTO wa_xml.
*    TRANSFER wa_xml TO dname.
*  ENDLOOP.
*  CLOSE DATASET dname.
 
 
ztestexcel内容:
 
<?sap.transform simple?>
<?mso-application progid="Excel.Sheet"?>
<tt:transform xmlns:tt=" http://www.sap.com/transformation-templates">
  <tt:root name="table"/>
  <tt:template>
    <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">
      <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
      </ExcelWorkbook>
      <Worksheet ss:Name="Sheet1">
        <Table ss:ExpandedColumnCount="3" ss:ExpandedRowCount="25" x:FullColumns="1" x:FullRows="1">
          <Column ss:Width="120"/>
          <Column ss:Width="220"/>
          <tt:loop ref=".table">
            <Row>
              <Cell>
                <Data ss:Type="String">
                  <tt:value ref="MATNR"/>
                </Data>
              </Cell>
              <Cell>
                <Data ss:Type="String">
                  <tt:value ref="MAKTX"/>
                </Data>
              </Cell>
            </Row>
          </tt:loop>
        </Table>
      </Worksheet>
    </Workbook>
  </tt:template>
</tt:transform>
 
注:如果要生成UTF-8的XML文件,可以更改CALL TRANSFORMATION的参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值