PB中导出EXCEL请教!
目前用PB做了一个小系统,字段大概有170多个,需要导出为EXCEL(目前表大概有7000多列,以后会更多),但用OLE导出时,就是一行一行往EXCEL里写很慢,请问有什...
目前用PB做了一个小系统,字段大概有170多个,需要导出为EXCEL(目前表大概有7000多列,以后会更多),但用OLE导出时,就是一行一行往EXCEL里写很慢,请问有什么方式(就想用WEB下载一样)能一次导出来另存为就OK了,或其他快速的方法?谢谢!
展开
展开全部
复制下面的代码,粘贴到记事本里,另存为f_pbtoexcel.srf
打开你的程序,展开System tree,在library图标上右击,点击import。将刚才的f_pbtoexcel.srf导进来。
用法:双击按钮,然后在按钮的click事件里输入 f_pbtoexcel(dw_1) 即可,其中dw_1是数据窗口的名称。
global type f_pbtoexcel from function_object
end type
forward prototypes
global function integer f_pbtoexcel (datawindow adw)
end prototypes
global function integer f_pbtoexcel (datawindow adw);
integer li_rtn,ii,li_asc
string ls_name,ls_pathname
boolean lb_exist
if adw.RowCount()<1 then
MessageBox("提示信息","请先检索数据再导出至Excel!")
return -1//error
end if
ls_pathname='导出文件'
li_rtn=GetFileSaveName("保存文件",ls_pathname,ls_name,"xls","Excel文件(*.xls),*.xls","C:\My Documents")
if li_rtn=1 then
lb_exist = FileExists(ls_pathname)
IF lb_exist THEN
li_rtn = MessageBox("保存", ls_pathname+"已经存在,是否覆盖?",Exclamation!, YesNo!)
end if
if li_rtn=1 then
//当文件存在用户选择覆盖,或是文件本就不存在时。注意变量li_rtn
li_rtn=adw.SaveAsAscii(ls_pathname)
if li_rtn=1 then
int ret
OLEObject xlapp
xlApp = Create OLEObject
// Connect to Excel and check the return code
ret = xlApp.ConnectToNewObject( "Excel.Sheet" )
if ret < 0 then
MessageBox("Connect to Excel Failed !",string(ret))
end if
xlApp.Application.Workbooks.Open(ls_pathname)
xlApp.Application.Visible = true
xlapp.application.WindowState=-4137
xlapp.application.activewindow.WindowState=-4137
//MessageBox("提示信息","导出数据成功!")
else
MessageBox("错误信息","导出数据失败!")
return -1//error
end if
else
return -1//error
end if
else
return -1
end if
return 1
end function
打开你的程序,展开System tree,在library图标上右击,点击import。将刚才的f_pbtoexcel.srf导进来。
用法:双击按钮,然后在按钮的click事件里输入 f_pbtoexcel(dw_1) 即可,其中dw_1是数据窗口的名称。
global type f_pbtoexcel from function_object
end type
forward prototypes
global function integer f_pbtoexcel (datawindow adw)
end prototypes
global function integer f_pbtoexcel (datawindow adw);
integer li_rtn,ii,li_asc
string ls_name,ls_pathname
boolean lb_exist
if adw.RowCount()<1 then
MessageBox("提示信息","请先检索数据再导出至Excel!")
return -1//error
end if
ls_pathname='导出文件'
li_rtn=GetFileSaveName("保存文件",ls_pathname,ls_name,"xls","Excel文件(*.xls),*.xls","C:\My Documents")
if li_rtn=1 then
lb_exist = FileExists(ls_pathname)
IF lb_exist THEN
li_rtn = MessageBox("保存", ls_pathname+"已经存在,是否覆盖?",Exclamation!, YesNo!)
end if
if li_rtn=1 then
//当文件存在用户选择覆盖,或是文件本就不存在时。注意变量li_rtn
li_rtn=adw.SaveAsAscii(ls_pathname)
if li_rtn=1 then
int ret
OLEObject xlapp
xlApp = Create OLEObject
// Connect to Excel and check the return code
ret = xlApp.ConnectToNewObject( "Excel.Sheet" )
if ret < 0 then
MessageBox("Connect to Excel Failed !",string(ret))
end if
xlApp.Application.Workbooks.Open(ls_pathname)
xlApp.Application.Visible = true
xlapp.application.WindowState=-4137
xlapp.application.activewindow.WindowState=-4137
//MessageBox("提示信息","导出数据成功!")
else
MessageBox("错误信息","导出数据失败!")
return -1//error
end if
else
return -1//error
end if
else
return -1
end if
return 1
end function
展开全部
如果代码是你在写的话很简单,数据窗口直接可以存成xls,txt,xml等多种形式的,你在pb帮助里搜dw_1.saveas('','',')这个就可以看到例子,常用的函数,比较少有用到.saveascii的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的数据是否是在数据窗口中的?如果是数据窗口中,使用PB自带的SAVEAS功能非常快的。
举个小列子,比如有个按钮叫导出,导出窗口中dw_1数据窗口的数据
string ls_path, ls_file
integer li_rc, li_ret
li_rc = getfilesavename("选择文件",ls_path,ls_file,"XLS","Excel Files (*.xls),*.xls, *.*")
if li_rc <> 1 then return
dw_1.SaveAs(ls_path,Excel!,TRUE)
举个小列子,比如有个按钮叫导出,导出窗口中dw_1数据窗口的数据
string ls_path, ls_file
integer li_rc, li_ret
li_rc = getfilesavename("选择文件",ls_path,ls_file,"XLS","Excel Files (*.xls),*.xls, *.*")
if li_rc <> 1 then return
dw_1.SaveAs(ls_path,Excel!,TRUE)
追问
多谢几位!确实很快,但是为什么标头不出来?只是内容?如何让标头也出来啊?
追答
saveas是可以导出表头的,但是是以英文字段的名字导出。
你可以使用打开EXCEL然后修改EXCEL第一行内容的方式来修改表头的名字。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用PB数据自带的函数saveas,速度很快
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一次肯定导不出来,只能分几个表存储
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询