关于数据窗口导出到excel表

wangxuehui 2002-12-30 02:22:03
我想将tabular格式的数据窗口导出到excel表中,请问该怎么做。
...全文
79 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qlzgdzfl 2002-12-31
  • 打赏
  • 举报
回复

constant integer ppLayoutBlank = 12
OLEObject ole_object
ole_object = CREATE OLEObject

integer li_ret

li_ret = ole_object.ConnectToObject("","Excel.Application")
IF li_ret <>0 THEN
//如果Excel还没有打开,则新建。
li_ret = ole_object.ConnectToNewObject("Excel.Application")
if li_ret <> 0 then
MessageBox('OLE错误','OLE无法连接!请查看本机上是否安装EXCEL!!错误号:' + string(li_ret))
return 0
end if
ole_object.Visible = True
END IF

oldpointer = SetPointer(HourGlass!)

ole_object.Workbooks.Add

long ll_colnum,ll_rownum
string ls_value

string ls_objects,ls_obj,ls_objs[],ls_objtag[]
long ll_pos,ll_len,ll_num = 0

ls_objects = trim(adw.Describe('datawindow.Objects'))

do while (pos(ls_objects,"~t") > 0)
ll_pos = pos(ls_objects,"~t")
ll_len = ll_pos - 1
ls_obj = left(ls_objects,ll_len)
string ls_m1,ls_m2


//if (adw.Describe(ls_obj + '.type') = 'column' or &
//adw.Describe(ls_obj + '.type') = 'compute') and &
//(adw.Describe(ls_obj + '.band') = 'detail') and (ls_obj <> "asd") then
if (adw.Describe(ls_obj + '.type') = 'text' or &
adw.Describe(ls_obj + '.type') = 'compute') and &
(adw.Describe(ls_obj + '.band') = 'header') and (ls_obj <> "asd") then
ll_num += 1
ls_objs[ll_num] = ls_obj
//ls_objtag[ll_num] = adw.Describe(ls_obj + '.tag')
ls_objtag[ll_num] = adw.Describe(ls_obj + '.text')
end if
ls_objects = right(ls_objects,len(ls_objects) - ll_pos)
loop

//得到数据窗口数据的列数与行数(行数应该是数据行数 + 1)
ll_colnum = ll_num
ll_rownum = adw.rowcount() + 1

string ls_colname
integer i,j,k
for i = 1 to ll_colnum
//得到标题头的名字
ls_value = ls_objtag[i]
ole_object.cells(1,i).value = ls_value
next

string column_name
for i = 2 to ll_rownum
for j = 1 to ll_colnum
column_name = mid(ls_objs[j],1,(len(ls_objs[j]) - 2))
ls_m1=adw.Describe(column_name + '.type')
ls_m2=adw.Describe(column_name + '.band')
if adw.Describe(column_name + '.type') = 'column' then
ls_value = adw.Describe("Evaluate('LookupDisplay("+column_name+")',"+string(i - 1)+")")
end if
if adw.Describe(column_name + '.type') = 'compute' then
ls_value = adw.Describe("Evaluate('" + adw.Describe(column_name + '.expression') + "',"+string(i - 1)+")")
end if
ole_object.cells(i,j).value = ls_value
next
next

SetPointer(oldpointer)

ole_object.disconnectobject()
DESTROY ole_object

return 1
lishiqian 2002-12-30
  • 打赏
  • 举报
回复
其实是一样的, 把字段写成dw_1.object形式试下
george77 2002-12-30
  • 打赏
  • 举报
回复
OLEObject ExcelServer
integer ExcelOK
ExcelServer = CREATE OLEObject
ExcelOK = ExcelServer.ConnectToNewObject( "excel.application" )
ExcelServer.Workbooks.Open('c:\aa.xls')
ExcelServer.ActiveWorkBook.Sheets("Sheet1").Select
ExcelServer.Application.Visible = false
ExcelServer.ActiveSheet.Cells(1,1).value=...
.....

ExcelServer.DisconnectObject()
destroy ExcelServer

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧