一个有关保存为EXCEL的问题.马上给分!

thomas0920 2004-11-15 04:42:46
我想把一个数据窗口的内容保存到EXCEL文件中,
保存没问题,可是标题变为数据库中的英文,而不是数据窗口中的中文.
我的代码如下:
//判断保存的文件是否已经存在
if FileExists(is_filename) then
if messagebox('另存为:','文件"'+is_filename+'"已经存在,覆盖该文件吗?',question!,okcancel!,1)=2 then return -1
end if
//保存文件

integer li_rc
li_rc=w_zlsf_2.dw_2.SaveAs(is_pathname,excel!,true)
if li_rc =1 then
messagebox("提示!","保存为EXCEL成功!")
close(parent)
else
messagebox("提示!","保存失败!")
end if
请问:如何把数据窗口中的中文保存到EXCEL中去?
...全文
344 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
kxm 2004-11-16
  • 打赏
  • 举报
回复
constant integer ppLayoutBlank = 12
OLEObject ole_object
ole_object = CREATE OLEObject

integer li_ret

li_ret = ole_object.ConnectToObject("","Excel.Application")
//messagebox("",sqlca.sqlerrtext)
IF li_ret <> 0 THEN
//如果Excel还没有打开,则新建。
li_ret = ole_object.ConnectToNewObject("Excel.Application")
if li_ret <> 0 then
// MessageBox('错误','新建Excel不成功!' + string(li_ret))
// MessageBox('错误','新建Excel不成功!')
if li_ret = -2 then
messagebox("提示","你的系统没有安装Excel!,不能导入Excel!",Exclamation!,OK!)
return 0
end if
end if
ole_object.Visible = true
//else
// messagebox('警告','你的系统已经打开了Excel!')
end if

pointer oldpointer
oldpointer = SetPointer(HourGlass!)

ole_object.Workbooks.Add

long ll_colnum,ll_rownum
string ls_value

string ls_objects,ls_obj,ls_objs[],ls_objtag[],ls_width[]
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)
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
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 +'_t' + '.text') //列汉字名字
ls_width[ll_num]= adw.Describe(ls_obj +'_t' + '.width') //每列的宽度
end if
ls_objects = right(ls_objects,len(ls_objects) - ll_pos)
loop

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

//生成标题
ole_object.Cells(1,1).Value =reptitle
ole_object.Range('A1').Select
ole_object.Selection.Font.Size = 12
ole_object.Selection.Font.Bold = true
ole_object.selection.HorizontalAlignment =3
ole_object.Range('A1:'+f_columname(ll_colnum)+'1').Select
ole_object.Range('A1:'+f_columname(ll_colnum)+'1').Merge

string ls_colname
integer i,j,k
dec ld_width
for i = 1 to ll_colnum
//得到标题头的名字
ls_value = ls_objtag[i]
ole_object.cells(2,i).value = ls_value
if isnull(ls_width[i]) then
ld_width=12
else
ld_width=dec(ls_width[i])/35
end if
ole_object.Columns(i).ColumnWidth=ld_width
ole_object.Columns(i).HorizontalAlignment =3

ole_object.Columns(i).Borders.LineStyle= 1
ole_object.Columns(i).Font.Bold = true
// ole_object.Columns(i).Font.color = rgb(32,178,170)
ole_object.Columns(i).Font.Size = 10
next



string column_name,ls_coltype
for i = 3 to ll_rownum
for j = 1 to ll_colnum
column_name = ls_objs[j]
if adw.Describe(column_name + '.type') = 'column' then
ls_value = adw.Describe("Evaluate('LookupDisplay("+column_name+")',"+string(i - 2)+")")
end if
if adw.Describe(column_name + '.type') = 'compute' then
ls_value = adw.Describe("Evaluate('" + adw.Describe(column_name + '.expression') + "',"+string(i - 2)+")")
end if
ls_coltype=adw.Describe(column_name+'.coltype')
if pos(upper(ls_coltype),"CHAR")>0 then //对字符型数据处理
ole_object.cells(i,j).NumberFormat ="@"
end if

ole_object.cells(i,j).Font.size = 10
ole_object.cells(i,j).Font.Bold = false
// ole_object.cells(i,j).Font.color = rgb(0,0,0)
ole_object.cells(i,j).value = ls_value
next
next
SetPointer(oldpointer)
//ole_object.Application.quit()
ole_object.disconnectobject()
DESTROY ole_object


return 1
wukejun 2004-11-15
  • 打赏
  • 举报
回复
up
wulengbing 2004-11-15
  • 打赏
  • 举报
回复
直接加到button的clicked事件中就行了
wulengbing 2004-11-15
  • 打赏
  • 举报
回复
OLEObject ole_object , ole_workbooks

ole_object = CREATE OLEObject
IF ole_object.ConnectToNewObject("Excel.Application") <> 0 THEN
MessageBox('OLE错误','OLE无法连接!')
return
END IF
ole_object.workbooks.add
ole_object.Visible = True
ole_workbooks = ole_object.Worksheets(1)
ole_workbooks.cells(1,1).value="学号"
ole_workbooks.cells(1,2).value="姓名"
ole_workbooks.cells(1,3).value="性别"
ole_workbooks.cells(1,4).value="所在系"
ole_workbooks.cells(1,5).value="生源地"



long l_row
for l_row = 2 to dw_1.rowcount()
ole_workbooks.cells(l_row,1).value=dw_1.getitemstring(l_row,1)
ole_workbooks.cells(l_row,2).value=dw_1.getitemstring(l_row,2)
ole_workbooks.cells(l_row,3).value=dw_1.getitemstring(l_row,3)
ole_workbooks.cells(l_row,4).value=dw_1.getitemstring(l_row,4)
ole_workbooks.cells(l_row,5).value=dw_1.getitemstring(l_row,5)

next
ole_workbooks.SaveAs ("data.xls")
ole_object.quit()
Ole_Object.DisConnectObject()
Destroy Ole_Object
destroy ole_workbooks
balloonman2002 2004-11-15
  • 打赏
  • 举报
回复
呵呵,发重了,:)
balloonman2002 2004-11-15
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=3183

Q : 数据窗口保存为EXCEL的好办法
主要解答者: myclife 提交人: myclife
感谢: linger_liang、zhanwei、RechardXc、swjtu95
审核者: zhanwei 社区对应贴子: 查看
A :

能保存几乎所有内容
// ... Init docname
// ... GetFileOpenName or any other method

if dw_1.SaveAs(docname, HTMLTable!, True) = -1 then
MessageBox("Warning", "Unable to export data. Error writing to file!", Exclamation!)
return
end if


// Convert HTML file to Excel native format
OLEObject excel
excel = CREATE OLEObject
if excel.ConnectToObject(docname) = 0 then
excel.application.DisplayAlerts = FALSE
excel.application.workbooks(1).Parent.Windows(excel.application.workbooks(1).Name).Visible = True
excel.application.workbooks(1).saveas(docname, 39)
excel.application.workbooks(1).close()
end if

DESTROY excel
// done
moyan1203 2004-11-15
  • 打赏
  • 举报
回复
能保存几乎所有内容
// ... Init docname
// ... GetFileOpenName or any other method

if dw_1.SaveAs(docname, HTMLTable!, True) = -1 then
MessageBox("Warning", "Unable to export data. Error writing to file!", Exclamation!)
return
end if


// Convert HTML file to Excel native format
OLEObject excel
excel = CREATE OLEObject
if excel.ConnectToObject(docname) = 0 then
excel.application.DisplayAlerts = FALSE
excel.application.workbooks(1).Parent.Windows(excel.application.workbooks(1).Name).Visible = True
excel.application.workbooks(1).saveas(docname, 39)
excel.application.workbooks(1).close()
end if

DESTROY excel
// done

th820901 2004-11-15
  • 打赏
  • 举报
回复

主  题: 建议版主长期置顶(datawindow与excel导入/导出问题)

http://community.csdn.net/Expert/topic/3301/3301373.xml?temp=.6618463
zhdCSDN 2004-11-15
  • 打赏
  • 举报
回复
用控件会好一些,我现在全是用控件在做,很方便的,可以保存成多种格式。(控件名:TTFI6.ocx)
th820901 2004-11-15
  • 打赏
  • 举报
回复
FAQ:

http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=108685

http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=199512
ameng163 2004-11-15
  • 打赏
  • 举报
回复
你可以试用一下FORMULE ONE控件,把你数据窗口的内容写入只有再另存为EXCEL,这种方法不是很方便,但是比较实用的。
或者,存为EXCEL后,修改标题的文本内容,你取一下标题,然后修改。
1TH 2004-11-15
  • 打赏
  • 举报
回复
FAQ中很多例子~

1,075

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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