如何在后台运行模式生成Excel格式文件
2012-11-16 14:10
716 查看
原文转载地址:http://blog.chinaunix.net/uid-8527621-id-2029918.html
如果要生成纯正的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(120) TYPE 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.
创建转换格式的事务码:STRANS
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的参数
如果要生成纯正的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(120) TYPE 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.
创建转换格式的事务码:STRANS
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的参数
相关文章推荐
- 如何在后台运行模式生成Excel格式文件(收藏)
- 如何在后台运行模式生成Excel格式文件
- 如何将hive表文本格式的源文件迁移至Oracle数据库或者excel文档中
- 如何在命令行模式下编译运行带包的java文件
- 如何将excel格式的中国三级地址文件转换成android需要的json格式的文件(一)
- 读取excel文件数据集,生成固定格式excel文件
- 如何在Excel中将文件大小中有GB、MB的信息转化成统一格式
- keil MDK中如何生成*.bin格式的文件
- 生成csv格式文件并导出至页面的前后台实现
- 关于poi导出大数据量EXCEL导出缓慢的解决方案--生成xml格式的表格文件(注意xls格式为03 07下格式会不一样)
- 如何在MDK中生成 *.bin 格式的文件
- 如何生成/读取带有密码的Office Excel 2003(Biff8格式)(非破解)
- 如何将位图格式图片文件(.bmp)生成geotiff格式图片?
- 将excel用VBA生成指定格式的TXT文件
- 生成Excel *.xls 生成 xls的格式与文件扩展名指定的格式不一致
- Linux Unicode 编程--C语言如何使用/生成UTF-8编码格式的文件
- 用VBA生成的EXCEL,打开报如下错误:您尝试打开的文件"1.xls"的格式与文件拓展名指定的格式不一致。。。。
- keil MDK中如何生成*.bin格式的文件
- 如何让UE不自动生成.bak文件,以及取消文件可能不是DOS格式的提示
- keil MDK中如何生成*.bin格式的文件