PB的数据窗口导出为EXCEL文件有问题,请有经验的朋友进来看看!
最近遇见这么一个问题,以前用PB开发的一个程序,现在出了一些问题,也就是我上面所说的将数据窗口导出为EXCEL文件的事情.我是将导出的功能写成一个函数的.并且不止这一个地方用到了这个函数,别的地方也同样用到过.但是别的地方却是能够正常导出的,不知道为什么.唯一区别是那个正常导出的数据窗口其数据量只有一万多条,但是那个导出错误的其数据量有三万多条,难道数据量大了就影响其导出吗?
现将该函数年贴如下(有两个传入的参数:dw_name 和 s_operator)
/*
参数说明:dw_name 待导出数据的数据窗口
s_operator 设定导出数据的分隔符
该程序运用于使用零件图号进行查询的窗口
*/
string ls_path //全路径,包含文件名
string ls_filename //文件名
string ls_line
string ls_col_name,ls_col_text
int li_rtn,li_writelines,li_writenum
int li_filehandle
long ll_col_count,ll_row_count
long i,j
string ls_input,ls_qgp,ls_output
boolean lb_exist
integer li_ret
li_rtn=GetFileSaveName("保存",ls_path,ls_filename,"xls","Excel文件(*.xls),*.xls")
//出现提示框提示用户进行相关的保存
lb_exist = FileExists(ls_filename)
//判断该文件是否已经存在
if lb_exist then
li_ret = MessageBox("提示", &
"是否覆盖原有的" + ls_filename +"文件", &
Question!, YesNo!)
//如果文件存在的话,则出现提示框,提示用户是否进行覆盖
if li_ret=2 then
return
else
goto store
end if
else
//如果文件不存在,则进行文件的保存
store:
if li_rtn=1 then
li_filehandle=FileOpen(ls_path,linemode!,write!,lockreadwrite!,replace!)
if li_filehandle>0 then
ll_col_count=long(dw_name.describe("DataWindow.Column.Count"))
ll_row_count=dw_name.rowcount()
ls_line=""
for j=1 to ll_col_count
ls_col_name=dw_name.describe("#"+string(j)+".name")
ls_col_text=dw_name.describe(ls_col_name+"_t.text")
ls_line=ls_line+s_operator+ls_col_text
next
ls_line=mid(ls_line,len(s_operator)+1)
li_writenum=filewrite(li_filehandle,ls_line)
if li_writenum>0 then
li_writelines++
end if
for i=1 to ll_row_count
ls_line=""
for j=1 to ll_col_count
if isnull(dw_name.object.data[i,j]) then
ls_line=ls_line+s_operator+""
else
ls_line=ls_line+s_operator+trim(string(dw_name.object.data[i,j]))
end if
next
ls_line=mid(ls_line,len(s_operator)+1)
li_writenum=filewrite(li_filehandle,ls_line)
if li_writenum>0 then
li_writelines++
end if
next
//以上代码在Excel文件中输入数据窗口的内容
if li_writelines<ll_row_count then
messagebox("提示","导出文件产生未知错误,数据未完全导出!")
return
end if
li_rtn=fileclose(li_filehandle)
if li_rtn<>1 then
messagebox("提示","文件关闭操作失败!")
return
else
messagebox("提示","文件导出完成!")
return
end if
else
messagebox("提示","文件打开操作失败!")
return
end if
else
// messagebox("提示","您取消了导出操作!")
// return
end if
end if
还想问一下,在遇见上面这个问题以后,后来我又在想别的方法,想起曾用saveascii()的方法保存为excel文件,我写了一个程序,在别的一个小的程序上用能正常导出,但是在这个上面虽然能导出,却出来一个空白的文件,不知道这又是什么道理.请大家也来解答一下,谢谢,程序如下所示:
int flag
string ls_path //路径名
string ls_filename //文件名
int li_rtn
boolean lb_exist
integer li_ret
li_rtn=GetFileSaveName("保存",ls_path,ls_filename,"xls","Excel文件(*.xls),*.xls")
//出现提示框提示用户进行相关的保存
lb_exist = FileExists(ls_filename)
//判断该文件是否已经存在
if lb_exist then
li_ret = MessageBox("提示", &
"是否覆盖原有的" + ls_filename +"文件", &
Question!, YesNo!)
//如果文件存在的话,则出现提示框,提示用户是否进行覆盖
if li_ret=2 then
return
else
goto store
end if
else
//如果文件不存在,则进行文件的保存
store:
if li_rtn=1 then
flag=dw_total_wage.saveasascii(ls_path)
if flag=1 then
messagebox("","导出成功!")
else
messagebox("","导出失败!")
end if
end if
end if
问题点数:100、回复次数:2Top
1 楼guoyutong2002(小丑鱼)回复于 2005-06-02 14:40:41 得分 100
数据类型设置为长整型试试?Top
2 楼tps1980()回复于 2005-06-02 14:43:04 得分 0
呵呵,这位大姐说得真是没错,果真是数据类型的问题.int型支持到-32768---+32767,我的数据已经达到38000多条,超过了范围,当然是有问题了,多谢,呵呵!Top




