pb9中使用htmltable方式将数据窗口导出为excel文件的几点看法
栏目:sybase时间:2013-11-15 10:59:24
在PB9中可以通过(1)saveas(ls_path, excel!, true)将数据窗口中的data数据导出为excel,可以通过(2)saveas(ls_path, htmltable!, true)将数据窗口中的display数据导出为html格式的excel文件,也可以通过(3)saveasascii(ls_path)将数据窗口中的display数据导出为excel文件。
第(1)种方法导出的文件对于客户来讲,实际意义并不大。第(2)和第(3)中方法都存在一定的缺陷:第(2)种导出的xls文件,在导出前通过dw_1.modify("DataWindow.HTMLTable.Border='1'")设置htmltable显示框线,来使得导出的excel文件包含边框,但是导出的文件有可能显示乱码,而且对于以0为开头的或者位数较长的纯数字的字符串数据,导出后的数据会失真(如:单元格数据为:01001, 但是导出的xls文件打开时,数据却为:1001;或者单元格数据为:123456789123456789, 导出的xls文件打开后,数据却为:1.23457E+17);第(3)种导出的数据没有框线,看起来也比较混乱,同时对于以0为开头的或者位数较长的纯数字的字符串数据,导出后的数据也会失真。
本文主要介绍第(2)种方法,至于第(3)中,在(PB调用SaveAsAscii转excel)这个链接上有关于以0为开头的纯数字的字符串数据的处理方法。
在pb的datawindow中具有如下属性dw_1.object.datawindow.data.htmltable, 该属性值与通过saveas(ls_path, htmltable!, true)导出的excel文件的内容基本上是一致的。因此我们可以考虑通过取得该属性值后,再将该属性值filewrite的方式来保存为excel文件。
在dw_1.object.datawindow.data.htmltable前面加上这一句'<META HTTP-EQUIV="Content-type" Content="text-html;charset=gb2312">',就可以保证最终filewrite后的excel不会显示为乱码。
在dw_1.object.datawindow.data.htmltable前面加上这一句'<html xmlns:x="urn:schemas-microsoft-com:office:excel">',并且在dw_1.object.datawindow.data.htmltable中的'<table>'属性中添加'x:str'属性值,即可保证导出的数字按照原样显示。
通过dw_1.object.datawindow.data.htmltable这种方式导出的excel文件中数据的字体大小默认为12号,字体默认为宋体,这个时候可以通过在'<table>'属性中添加'style=~'font-size:9.0pt;font-family:"Times New Roman,serif;"~''属性值来改变默认的字体为“Times New Roman”,默认字号为9号
具体可以这样处理:
[cpp]
string ls_htmldata
ls_htmldata = dw_1.object.datawindow.data.htmltable
//以下函数将ls_htmldata中的第一个'<table'替换为'<table x:str style=~'font-size:9.0pt;font-family:"Times New Roman,serif;"~'', 函数请自己完善
str_replace(ls_htmldata, '<table', '<table x:str style=~'font-size:9.0pt;font-family:"Times New Roman,serif;"~'')
ls_htmldata = '<html xmlns:x="urn:schemas-microsoft-com:office:excel">~r~n' +&
'<META HTTP-EQUIV="Content-type" Content="text-html;charset=gb2312">~r~n' +&
ls_htmldata
然后通过fileopen,filewrite ,fileclose 将ls_htmldata保存到(*.xls)excel文件中
这样就可以既保证导出的xls文件不显示乱码,同时又能正确的显示全数字的文本字段,再者改变默认字体为Times New Roman,默认字号为9号。
另外导出的excel文件由于是html格式的,所以每次打开的时候速度会计较慢,我们可以在filewrite后,通过oleobject的方法将本次保存的文件用excel打开,然后再保存,这样就可以保证导出的文件是名副其实的excel文件了。
摘自 yyoinge的专栏
------分隔线----------------------------
------分隔线----------------------------