datawindow导出excel格式

neu724 2003-09-13 01:14:03
表中的字段名用的是英文,相应的数据窗口对象中有隐藏的项,我现在想把相应的数据窗口控件中查询的结果存为excel格式,并且把字段名改成中文.而隐藏的列不存到excel中,应该怎样办.
...全文
77 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Liearl 2003-11-02
  • 打赏
  • 举报
回复
下面这段代码可以实现隐藏的列不存到excel中:
for c = 1 to numcols
ls_colname = dw_print.describe('#'+string(c)+".name")+"_t"
ls_ret = dw_print.describe(ls_colname + ".visible")
if ls_ret = '1' then
xlsub.cells[1,c] = dw_print.describe(ls_colname+".text")

for r = 1 to numrows
xlsub.cells[r+1,c] = dw_print.object.data[r,c]
next

end if

next
muming111 2003-09-15
  • 打赏
  • 举报
回复
save as htmltable
不过若是列数太多还是会出现多出数列、数行或错排的问题,期待有更好的解决方法~~~~~~~~
阿鹏兄 2003-09-15
  • 打赏
  • 举报
回复
//通过ole直接操作excel


OLEObject ole_object
//
ole_object = CREATE OLEObject

//连接excel
IF ole_object.ConnectToNewObject("excel.application") <> 0 THEN
MessageBox('OLE错误','OLE无法连接!')
return
END IF
long ll_colnum,ll_rownum,ll_row
ll_colnum = Long(this.object.datawindow.column.count)
ll_rownum = this.rowcount()
long ll_a
ll_a=asc('A')//得到A(asc)值
// //画网格

// ole_object.Selection.Font.FontStyle = "加粗"
ole_object.visible=true
ole_object.Workbooks.Add()
ole_object.range("B2:"+char(ll_a+ll_colnum)+string (ll_rownum+2)).select
ole_object.Selection.Font.size=9
ole_object.Selection.Borders(7).ColorIndex=1
ole_object.Selection.Borders(7).LineStyle=1
ole_object.Selection.Borders(7).Weight=2

ole_object.Selection.Borders(8).ColorIndex=1
ole_object.Selection.Borders(8).LineStyle=1
ole_object.Selection.Borders(8).Weight=2

ole_object.Selection.Borders(9).ColorIndex=1
ole_object.Selection.Borders(9).LineStyle=1
ole_object.Selection.Borders(9).Weight=2

ole_object.Selection.Borders(10).ColorIndex=1
ole_object.Selection.Borders(10).LineStyle=1
ole_object.Selection.Borders(10).Weight=2
//
ole_object.Selection.Borders(11).ColorIndex=1
ole_object.Selection.Borders(11).LineStyle=1
ole_object.Selection.Borders(11).Weight=2

ole_object.Selection.Borders(12).ColorIndex=1
ole_object.Selection.Borders(12).LineStyle=1
ole_object.Selection.Borders(12).Weight=2
// ole_object.selection.HorizontalAlignment = -4108
///表头

ole_object.range("B2:"+char(ll_a+ll_colnum)+'2').select
ole_object.Selection.Font.size=9
ole_object.Selection.Font.FontStyle = "加粗"
ole_object.selection.Interior.ColorIndex = 15
ole_object.selection.Interior.Pattern = 1
ole_object.selection.Interior.PatternColorIndex = -4105
long ll_i,ll_width,ll_j
string ls_type

for ll_i=1 to ll_colnum
ll_width=integer(this.Describe("#"+string(ll_i)+".Width"))
ls_type= this.describe("#"+string(ll_i)+'.coltype')
ole_object.Columns(char(ll_a+ll_i)+':'+char(ll_a+ll_i)).ColumnWidth=ll_width/35
ole_object.cells[2,ll_i+1]=this.Describe("#"+string(ll_i)+".Tag")
if lower(left(ls_type,5))='char(' then
ole_object.Columns(char(ll_a+ll_i)+':'+char(ll_a+ll_i)).NumberFormatLocal = "@"
end if
next
string ls_editsyle//编辑格式
string ls_columnname,ls_value
// DataWindowChild ldw_child
for ll_i=1 to ll_rownum
for ll_j=1 to ll_colnum
ls_editsyle=lower(this.describe('#'+string(ll_j)+'.edit.style'))
if ls_editsyle='dddw' then
ls_columnname=this.describe('#'+string(ll_j)+'.name')
ls_value=trim(this.describe("Evaluate('lookupdisplay("+ls_columnname+")',"+string(ll_i)+')"'))
// ls_value=this.lookupdisplay('"'+ls_columnname+'"')
else
ls_value=string(this.object.data[ll_i,ll_j])
end if
if ls_value='!' then ls_value=''
if right(ls_value,1)='!' then ls_value=mid(ls_value,1,len(ls_value)-1)
ole_object.cells[2+ll_i,ll_j+1]=ls_value
next
next


// ole_1.object.application.cells[2+i,j]="'"+dw_new.object.data[i,j]



Ole_Object.DisConnectObject()
Destroy Ole_Object
大连豆包 2003-09-15
  • 打赏
  • 举报
回复
用写文件的方法吧:
lOLE_Excel = create OLEObject
open(w_cx_kqdabh_wait)
w_cx_kqdabh_wait.hpb_1.maxposition = 26
ls_ProcessText = "正在连接......" ; li_Current = 0 ; wf_Process(li_Total,li_Current,ls_ProcessText)
li_ReturnCode = lOLE_Excel.connecttoobject(ls_File)
if li_ReturnCode = 0 then
for i = 1 to 5
j = i + 10
li_Counter ++
ls_ProcessText = "正在倒入数据......" ; li_Current = li_Counter ; wf_Process(li_Total,li_Current,ls_ProcessText)
if li_BQCount > 0 then
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,4).value = ids_BQ.getitemdecimal(i,"b1")
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,5).value = ids_BQ.getitemdecimal(i,"b2")
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,8).value = ids_BQ.getitemdecimal(i,"b5")
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,9).value = ids_BQ.getitemdecimal(i,"b6")
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,10).value = ids_BQ.getitemdecimal(i,"b7")
else
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,4).value = 0
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,5).value = 0
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,8).value = 0
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,9).value = 0
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,10).value = 0
end if
// if li_SQCount > 0 then
// lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,5).value = ids_SQ.getitemdecimal(i,"b1")
// else
// lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,5).value = 0
// end if
next
for i = 6 to 26
j = i + 11
li_Counter ++
ls_ProcessText = "正在倒入数据......" ; li_Current = li_Counter ; wf_Process(li_Total,li_Current,ls_ProcessText)
if li_BQCount > 0 then
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,4).value = ids_BQ.getitemdecimal(i,"b1")
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,5).value = ids_BQ.getitemdecimal(i,"b2")
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,8).value = ids_BQ.getitemdecimal(i,"b5")
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,9).value = ids_BQ.getitemdecimal(i,"b6")
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,10).value = ids_BQ.getitemdecimal(i,"b7")
else
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,4).value = 0
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,5).value = 0
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,8).value = 0
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,9).value = 0
lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,10).value = 0
end if
// if li_SQCount > 0 then
// lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,5).value = ids_SQ.getitemdecimal(i,"b1")
// else
// lOLE_Excel.application.workbooks(1).worksheets(1).cells(j,5).value = 0
// end if
next

ls_ProcessText = "正在关闭连接......" ; li_Current = li_Counter ; wf_Process(li_Total,li_Current,ls_ProcessText)
lOLE_Excel.application.workbooks(1).worksheets(1).cells(2,1).value = "("+dw_1.object.t_TJQJ.text+")"
lOLE_Excel.application.workbooks(1).save()
close(w_cx_kqdabh_wait)
messagebox("信息:","数据倒入完毕!",information!,ok!)
else
close(w_cx_kqdabh_wait)
messagebox("信息:","对象连接失败,请将打开的文件("+ls_File+")关闭!",stopsign!,ok!)
end if
destroy lOLE_Excel
runsoft 2003-09-14
  • 打赏
  • 举报
回复
vba
save as 不成。到处的列什么也不是,而且顺序很乱
neu724 2003-09-14
  • 打赏
  • 举报
回复
这种方法不好用,它会把数据库中的所有列都保存到excel中,不能实现所见即所得的保存.
如果用循环的话太慢了,还有没有别的办法了.
chinesegump 2003-09-13
  • 打赏
  • 举报
回复
如果是grid型的datawindow,
可以试试下面的函数

///////////////////////////////////////////////////////////////////////////
//
// Function : gf_export_data3
//
// Parameters : ad_dw : datawindow
//
// Returns : true/false : boolean
//
// Description : Save the datawindow as a xls/doc file, what you see is what you get.
//
///////////////////////////////////////////////////////////////////////////
//
// author : 纪兆华 (jzhaohua@263.net)
// date : 2002-09-04
//
///////////////////////////////////////////////////////////////////////////


//declare the local variables
int li_value
string ls_path,ls_fname

li_value = GetFilesaveName("请选择导出文件", &
+ ls_path, ls_fname, "XLS", &
+ "Excel文件 (*.xls), *.xls," &
+ "Word 文件 (*.doc), *.doc,")
IF li_value <> 1 THEN return false

setpointer(hourglass!)

// 删除原文件
if fileexists(ls_path) then
if messagebox('提示信息', '原文件已经存在, 是否覆盖 ?', Question!, YesNo!) = 2 then return false
if not filedelete(ls_path) then
messagebox('提示信息', '删除原文件失败, 该文件可能正在被使用 !')
return false
end if
end if

if ad_dw.SaveAs(ls_path, HTMLTable!, True) = -1 then
MessageBox("提示信息", "导出数据出错. 不能写入文件 !", Exclamation!)
return false
end if

messagebox('提示信息','数据导出成功 !', Exclamation!)
return true
klbt 2003-09-13
  • 打赏
  • 举报
回复
可以用写文件的方法实现。

609

社区成员

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

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