社区
DataWindow
帖子详情
datawindow导成EXCEL问题
wz4085753
2004-12-01 12:00:29
小弟想把DATAWINDOW里面的数据导给EXCEL请问怎么解决!
我记的好象有个函数能实现!可我忘了是什么函数和用法!
请大虾指教
...全文
108
4
打赏
收藏
datawindow导成EXCEL问题
小弟想把DATAWINDOW里面的数据导给EXCEL请问怎么解决! 我记的好象有个函数能实现!可我忘了是什么函数和用法! 请大虾指教
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wz4085753
2004-12-01
打赏
举报
回复
感谢大虾
powerly
2004-12-01
打赏
举报
回复
直接在程序中调用这个函数即可:
string ls_path,ls_FileName
//
if GetFileSaveName('保存为',ls_path, ls_FileName, 'xls','Excel Files (*.xls),*.xls') = 1 then
if f_ExportToExcel(dw_1,ls_FileName) then
messagebox("信息","数据导出完成!",INFORMATION!,OK!)
else
messagebox("信息","数据导出失败!",STOPSIGN!,OK!)
end if
end if
//
return ci_YES
函数如下
//f_ExportToExcel
///////////////////////////////////////////////////////////////////////////
//
// Parameters : ad_dw : datawindow
// as_file : file name
// Returns : true/false : boolean
// Description : Save the datawindow as a excel file.
//
///////////////////////////////////////////////////////////////////////////
declare the local variables
long i, j, li_pos
string ls_objects, ls_obj, ls_text, ls_err, ls_sql,ls_ColType
datastore lds_saveas //导出数据窗
datastore lds_sort //获得根据 object.x 排序的 (band = detail and visible = 1) 的 column/compute
boolean lb_return //返回值
string ls_pbver //pb 版本信息
environment env //环境变量
//
SetPointer(HourGlass!)
//
getenvironment(env)
ls_pbver = string(env.pbmajorrevision)
//创建排序列 datastore
lds_sort = create datastore
ls_sql = 'column=(type=char(1) name = ztext dbname="ztext" )' + '~r~n' + &
'column=(type=char(1) name = zcol dbname="zcol" )' + '~r~n' + &
'column=(type=long name = zx dbname="zx" )' + '~r~n' + &
'column=(type=char(1) name = ztype dbname="ztype" )' + '~r~n'
ls_sql = 'release ' + ls_pbver + ';~r~ntable(' + ls_sql + ')'
lds_sort.create(ls_sql, ls_err)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if
//准备数据====================================================
//all controls
ls_objects = ad_dw.Describe("datawindow.objects")
//按~t位置作判断开始循环
do while (pos(ls_objects,"~t") > 0)
li_pos = pos(ls_objects,"~t")
ls_obj = left(ls_objects,li_pos - 1)
ls_objects = right(ls_objects,len(ls_objects) - li_pos)
//(column or compute ) at detail and visible
if (ad_dw.Describe(ls_obj+".type") = "column" or ad_dw.Describe(ls_obj+".type") = "compute" ) AND &
(ad_dw.Describe(ls_obj+".band") = "detail" ) AND &
(ad_dw.Describe(ls_obj+".visible") = "1" ) THEN
ls_text = ad_dw.describe(ls_obj + '_t.text')
if ls_text <> '!' and ls_text <> '?' then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(), 'ztext', ls_text)
lds_sort.setitem(lds_sort.rowcount(), 'zcol', ls_obj)
lds_sort.setitem(lds_sort.rowcount(), 'zx', long(ad_dw.describe(ls_obj + '.x')))
ls_ColType = ad_dw.Describe(ls_obj+".ColType")
choose case upper(left(ls_ColType,3))
case 'DEC','INT','LON','NUM','REA','ULO'
lds_sort.setitem(lds_sort.rowcount(), 'ztype',ls_ColType)
case else
lds_sort.setitem(lds_sort.rowcount(), 'ztype','char(1)')
end choose
end if
end if
loop
//the last control
ls_obj = ls_objects
if (ad_dw.Describe(ls_obj+".type") = "column" or ad_dw.Describe(ls_obj+".type") = "compute" ) AND &
(ad_dw.Describe(ls_obj+".band") = "detail" ) AND &
(ad_dw.Describe(ls_obj+".visible") = "1" ) THEN
ls_text = ad_dw.describe(ls_obj + '_t.text')
if ls_text <> '!' and ls_text <> '?' then
lds_sort.insertrow(0)
lds_sort.setitem(lds_sort.rowcount(), 'ztext', ls_text)
lds_sort.setitem(lds_sort.rowcount(), 'zcol', ls_obj)
lds_sort.setitem(lds_sort.rowcount(), 'zx', long(ad_dw.describe(ls_obj + '.x')))
ls_ColType = ad_dw.Describe(ls_obj+".ColType")
choose case upper(left(ls_ColType,3))
case 'DEC','INT','LON','NUM','REA','ULO'
lds_sort.setitem(lds_sort.rowcount(), 'ztype',ls_ColType)
case else
lds_sort.setitem(lds_sort.rowcount(), 'ztype','char(1)')
end choose
end if
end if
//如果没有列则跳出
if lds_sort.rowcount() < 1 then goto lab1
//根据 object.x 排序
lds_sort.setsort('zx A')
lds_sort.sort()
//创建导出 datastore
lds_saveas = create datastore
ls_sql = ''
for i = 1 to lds_sort.rowcount()
ls_obj = lds_sort.getitemstring(i, 'zcol')
ls_ColType = lds_sort.getitemstring(i, 'ztype')
ls_text = lds_sort.getitemstring(i, 'ztext')
ls_sql += 'column=(type='+ls_ColType+' dbname="' + ls_text + '" )' + '~r~n'
next
ls_sql = 'release ' + ls_pbver + ';~r~ntable(' + ls_sql + ')'
lds_saveas.create(ls_sql, ls_err)
if len(ls_err) > 0 then
lb_return = false
goto lab1
end if
//向 lds_saveas 中写数据
for i = 1 to ad_dw.rowcount()
yield()//释放消息队列, 如果数据量较大, 可以使用这个函数
lds_saveas.insertrow(0)
for j = 1 to lds_sort.rowcount()
SetPointer(HourGlass!)
ls_obj = lds_sort.getitemstring(j, 'zcol')
ls_ColType = lds_sort.getitemstring(j, 'ztype') //---------
if ad_dw.describe(ls_obj + '.type') = 'column' then
ls_text = ad_dw.describe('evaluate(~'LookUpDisplay(' + ls_obj + ')~', ' + string(i) + ')')
else
ls_text = ad_dw.describe('evaluate(~'' + ls_obj + '~',' + string(i) + ')')
end if
choose case upper(left(ls_ColType,3))
case 'DEC','REA','NUM'
lds_saveas.setitem(i, j, dec(ls_text))
case 'INT','LON','ULO'
lds_saveas.setitem(i, j, long(ls_text))
case else
lds_saveas.setitem(i, j, ls_text)
end choose
next
next
//saveas datawindow
lb_return = (lds_saveas.saveas(as_file, excel!, true) = 1)
//
lab1:
destroy lds_sort
destroy lds_saveas
SetPointer(Arrow!)
//
return lb_return
hds8229830
2004-12-01
打赏
举报
回复
SaveAsAscii
wz4085753
2004-12-01
打赏
举报
回复
????
我想问一下!用以上的方法!导出后DATAWINDOW里的计算列没了
怎么能让计算列跟着一起上去啊 !
pb9
data
window
导
excel
pb9将
data
window
导出到
excel
PB数据窗口source介绍及举例
数据窗口源码介绍 (举例见d_dbit_example.srd,测试数据库为PB自带的EAS Demo DB V120) 1.第一行:release 12; 数据窗口所属PB的版本号,如果想把高版本的
data
window
导入低版本的PB中要修改此数字; 2.
data
window
()行 通常用修改processing属性,可以把你的数据窗口由grid变成freeform或其它类型 例:freeform:0 grid:1 3.header()行 可以整行复制粘贴,并命名为header[1],header[2],这样可以让数据窗口有多个header 4.table()行 这里全是定义的数据属性,是setitem,update,object.
data
等方法访问的根源 如果存在table()里的column,数据窗口里可以不存在任何对象,仍然可以访问数据窗口的数据 如果想创建一个空的数据窗口,可以只定义: release 12; table() 5.table(column行) 是第几个column,它的ID就是多少,其中也定义了是否可以update时和更新到数据表的字段名 6.table(retrieve行) 检索数据时使用的SQL语句,可以通过setsqlselect或modify("table.sqlselect")方法去动态修改 修改后要重新定义数据窗口的更新属性 7.column()行 id即是对应table(column行)里的行次,名称(name)可以随便命名,也可以没有,则默认为table(column行)里的name 8.compute()行 计算列,可以通过表达式计算显示特定值(具体函数可以见共享里的画笔函数). 9.text()行 有时可以代替计算列; 通过定义text的表达式,可以实现一列中显示两个字段值,注意结果必须要转换成string类型(而column和compute则不行); 10.htmltable()行 按照格式导出(saveas)html文件,为了保证格式的完整,数据窗口的单位最好设置成pixels GenerateCSS='1' //保持格式及颜色 Border='0' //不要table边框 CellSpacing='0' //单元格无间距(此项在界面上经常设置不上) 注: (1)Grid生成
标签,Freeform生成
+
标签; (2)生成htmltable时,不知为何会在CSS中的开始自动加一个分号";",导致
excel
等浏览器打开不能正常显示格式; (3)band为foreground或background的对象导不出来,可以动态修改后再导出. 11.export.xml()行 定义导出xml文件的格式,并为模板保存名称 使用时一定要设置usetemplate值 12.import.xml()行 定义导入xml文件的格式,并为模板保存名称 使用时一定要设置usetemplate值 13.表达式介绍 略 14.其它也略
dw2xls_demo_pb9.zip
DW2XLS是一个用于PowerBuilder开发环境的应用组件。用于把
Data
Window
生成的报表,包括格式和数据,尽量完整的导出生成为
Excel
文件。DW2XLS原版本自从2004年发布之后,一直广受PB开发者的欢迎,在很大程度上解决了PB开发的应用系统,报表导出生成
Excel
文件的需要。
PB的
data
window
导出到
excel
文件(使用saveasascii)
**********************************************************/ /*函数名称:uf_dwsaveas_
excel
功能:将数据窗口数据导出
EXCEL
文件,并将
EXCEL
文件默认英文标题替换成中文。 参数:
data
window
data
win,为用户要导出数据窗口的数据窗口控件名 返回值:integer 1,success;-1,error 流程描述:先用saveasAscii()倒出为
excel
文件,再替换表头为中文名 原因:为...
控制多个
data
window
数据合并成一个
excel
导出【PB】
最近项目需要,需要把多个
data
window
的数据合并成一个
excel
导出。本地项目没有其他代码借鉴,自己接触PB顶多3个月时间,而网上关于PB的消息少之又少。前些日子在powerbuilder论坛发个帖子求组,幸运得到powerbuilder版主和一位热心网友提示,通过自己不断地coding and debug, 我想要的效果终于得到了,:-) 现在我把源码贡献出来,大家一起学习,欢迎
DataWindow
611
社区成员
20,469
社区内容
发帖
与我相关
我的任务
DataWindow
PowerBuilder DataWindow
复制链接
扫一扫
分享
社区描述
PowerBuilder DataWindow
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章